Skip to main content
Weaviate Docs (migrated from docs.weaviate.io) Docs

Search documentation

Type to search this documentation.

On this pageOverview

Manage users

In Weaviate, Role-based access control (RBAC) allows you to define roles and assign permissions to those roles. Users can then be assigned to roles and inherit the permissions associated with those roles.

Weaviate differentiates multiple types of users. Database users are fully managed by the Weaviate instance, while OIDC users are managed by an external identity provider. Both types can be used together with RBAC.

On this page, you will find examples of how to programmatically manage users and their associated roles with Weaviate client libraries.

This example shows how to get a list of all the users (db_user, db_env_user and oidc) in Weaviate.

Python
print(client.users.db.list_all())
JavaScript/TypeScript
console.log(await client.users.db.listAll())
Go
users, err := client.Users().DB().Lister().Do(ctx)
fmt.Println(users)
Java
var allUsers = client.users.db.list();
System.out.println(allUsers);
C#
var allUsers = await client.Users.Db.List();
Console.WriteLine(string.Join(", ", allUsers.Select(u => u.UserId)));
Example results
text
[
  UserDB(user_id='custom-user', role_names=['viewer', 'testRole'], user_type=<UserTypes.DB_DYNAMIC: 'db_user'>, active=True),
  UserDB(user_id='root-user', role_names=['root'], user_type=<UserTypes.DB_STATIC: 'db_env_user'>, active=True)
]

This example creates a user called custom-user.

Python
user_api_key = client.users.db.create(user_id="custom-user")
print(user_api_key)
JavaScript/TypeScript
let userApiKey
Go
userApiKey, err := client.Users().DB().Creator().WithUserID("custom-user").Do(ctx)
fmt.Println(userApiKey)
Java
String userApiKey = client.users.db.create(testUser);
System.out.println(userApiKey);
C#
string userApiKey = await client.Users.Db.Create(testUser);
Console.WriteLine(userApiKey);
Example results
text
RXF1dU1VcWM1Q3hvVndYT0F1OTBOTDZLZWx0ME5kbWVJRVdPL25EVW12QT1fMXlDUEhUNjhSMlNtazdHcV92MjAw

This example deletes a user called custom-user.

Python
client.users.db.delete(user_id="custom-user")
JavaScript/TypeScript
await client.users.db.delete("custom-user")
Go
deleted, err := client.Users().DB().Deleter().WithUserID("custom-user").Do(ctx)
Java
client.users.db.delete(testUser);
C#
await client.Users.Db.Delete(testUser);

This example updates (rotates) the API key for custom-user.

Python
new_api_key = client.users.db.rotate_key(user_id="custom-user")
print(new_api_key)
JavaScript/TypeScript
let newApiKey
newApiKey = await client.users.db.rotateKey("custom-user")
console.log(newApiKey)
Go
newApiKey, err := client.Users().DB().KeyRotator().WithUserID("custom-user").Do(ctx)
fmt.Println(newApiKey)
Java
String newApiKey = client.users.db.rotateKey(testUser);
System.out.println(newApiKey);
C#
string newApiKey = await client.Users.Db.RotateApiKey(testUser);
Console.WriteLine(newApiKey);
Example results
text
SSs3WGVFbUxMVFhlOEsxVVMrQVBzM1VhQTJIM2xXWngwY01HaXFYVnM1az1fMXlDUEhUNjhSMlNtazdHcV92MjAw

A custom user can have any number of roles assigned to them (including none). The role can be a predefined role (e.g. viewer) or a custom role.

This example assigns the custom testRole role and predefined viewer role to custom-user.

Python
client.users.db.assign_roles(user_id="custom-user", role_names=["testRole", "viewer"])
JavaScript/TypeScript
await client.users.db.assignRoles(["testRole", "viewer"], "custom-user")
Go
err = client.Users().DB().RolesAssigner().
  WithUserID("custom-user").
  WithRoles("testRole", "viewer").
  Do(ctx)
Java
client.users.db.assignRoles(testUser, testRole, "viewer");
C#
await client.Users.Db.AssignRoles(testUser, new[] { testRole, "viewer" });

You can revoke one or more roles from a specific user.

This example removes the role testRole from the user custom-user.

Python
client.users.db.revoke_roles(user_id="custom-user", role_names="testRole")
JavaScript/TypeScript
await client.users.db.revokeRoles("custom-user", "testRole")
Go
err = client.Users().DB().RolesRevoker().
  WithUserID("custom-user").
  WithRoles("testRole").
  Do(ctx)
Java
client.users.db.revokeRoles(testUser, testRole);
C#
await client.Users.Db.RevokeRoles(testUser, new[] { testRole });

Retrieve the role information for any user.

Python
user_roles = client.users.db.get_assigned_roles("custom-user")

for role in user_roles:
    print(role)
JavaScript/TypeScript
let userRoles = await client.users.db.getAssignedRoles("custom-user")

for (const [role, value] of Object.entries(userRoles)) {
    console.log(role)
}
Go
userRoles, err := client.Users().DB().RolesGetter().
  WithUserID("custom-user").
  WithIncludeFullRoles(true).
  Do(ctx)

for _, role := range userRoles {
  fmt.Println(role)
}
Java
var userRoles = client.users.db.assignedRoles(testUser);
for (Role role : userRoles) {
  System.out.println(role.name());
}
C#
var userRoles = await client.Users.Db.GetRoles(testUser);
foreach (var role in userRoles)
{
    Console.WriteLine(role.Name);
}
Example results
text
testRole
viewer

When using OIDC, an identity provider authenticates the user and issues tokens, which are then validated by Weaviate. These users can be assigned roles with custom permissions using RBAC.

An OIDC user can have any number of roles assigned to them (including none). The role can be a predefined role (e.g. viewer) or a custom role.

This example assigns the custom testRole role and predefined viewer role to custom-user.

Python
client.users.oidc.assign_roles(user_id="custom-user", role_names=["testRole", "viewer"])
JavaScript/TypeScript
await client.users.oidc.assignRoles(["testRole", "viewer"], "custom-user",)
Go
err = client.Users().OIDC().RolesAssigner().
  WithUserID("custom-user").
  WithRoles("testRole", "viewer").
  Do(ctx)
Java
client.users.oidc.assignRoles(testUser, testRole, "viewer");
C#
await client.Users.Oidc.AssignRoles(testUser, new[] { testRole, "viewer" });

You can revoke one or more roles from a specific OIDC user.

This example removes the role testRole from the user custom-user.

Python
client.users.oidc.revoke_roles(user_id="custom-user", role_names="testRole")
JavaScript/TypeScript
await client.users.oidc.revokeRoles("testRole","custom-user")
Go
err = client.Users().OIDC().RolesRevoker().
  WithUserID("custom-user").
  WithRoles("testRole").
  Do(ctx)
Java
client.users.oidc.revokeRoles(testUser, testRole);
C#
await client.Users.Oidc.RevokeRoles(testUser, new[] { testRole });

Retrieve the role information for an OIDC user.

Python
user_roles = client.users.oidc.get_assigned_roles(user_id="custom-user")

for role in user_roles:
    print(role)
JavaScript/TypeScript
const userRoles = await client.users.oidc.getAssignedRoles("custom-user")

for (const [role, value] of Object.entries(userRoles)) {
    console.log(role)
}
Go
userRoles, err := client.Users().OIDC().RolesGetter().
  WithUserID("custom-user").
  WithIncludeFullRoles(true).
  Do(ctx)

for _, role := range userRoles {
  fmt.Println(role)
}
Java
var oidcUserRoles = client.users.oidc.assignedRoles(testUser);
for (Role role : oidcUserRoles) {
  System.out.println(role.name());
}
C#
var oidcUserRoles = await client.Users.Oidc.GetRoles(testUser);
foreach (var role in oidcUserRoles)
{
    Console.WriteLine(role.Name);
}
Example results
text
testRole
viewer

Have a question or feedback? Here's how to reach us.

Suggest an edit

Propose a replacement for this page. The site team reviews it before applying any changes.

Export
Documentation menu