User Management
- how-to
The .NET SDK lets you create users, assign them roles and associated privileges, and remove them from the system.
User-Management APIs
Users who have been assigned the Admin role for the cluster are able to create, edit, and remove users. The .NET SDK provides APIs to support these activities. A high-level summary of the APIs can be found in User-Management, and details of all options in the UserManager API docs.
Using the UserManager API
The most common uses of the UserManager
API are creating and listing users:
User user = new User(testUsername) {
Password = testPassword,
DisplayName = "Constance Lambert",
Roles = new List<Role>() {
// Roles required for the reading of data from the bucket
new Role("data_reader", "*"),
new Role("query_select", "*"),
// Roles required for the writing of data into the bucket.
new Role("data_writer", bucketName),
new Role("query_insert", bucketName),
new Role("query_delete", bucketName),
// Role required for the creation of indexes on the bucket.
new Role("query_manage_index", bucketName)
}
};
await cluster.Users.UpsertUserAsync(user);
IEnumerable<UserAndMetaData> listOfUsers = await cluster.Users.GetAllUsersAsync();
foreach (UserAndMetaData currentUser in listOfUsers) {
Console.WriteLine($"User's display name is: { currentUser.User().DisplayName }");
IEnumerable<Role> currentRoles = currentUser.User().Roles;
foreach (Role role in currentRoles) {
Console.WriteLine($" User has the role: { role.Name }, applicable to bucket { role.Bucket }");
}
}
Using a user created in the SDK to access data:
var userCluster = await Cluster.ConnectAsync(
"couchbase://your-ip",
testUsername, testPassword);
var userBucket = await userCluster.BucketAsync(bucketName);
var scope = await userBucket.ScopeAsync("inventory");
var collection = await scope.CollectionAsync("airline");
try
{
await userCluster.QueryIndexes.CreatePrimaryIndexAsync(
$"`{bucketName}`", // NCBC-2955
new CreatePrimaryQueryIndexOptions().IgnoreIfExists(true));
}
catch (InternalServerFailureException)
{
Console.WriteLine("Primary index already exists!");
}
using var returnedAirline10doc = await collection.GetAsync("airline_10");
await collection.UpsertAsync(
"airline_11", new {
callsign = "MILE-AIR",
iata = "Q5",
icao = "MLA",
id = 11,
name = "40-Mile Air",
type = "airline"
}
);
using var returnedAirline11Doc = await collection.GetAsync("airline_11");
Console.WriteLine($"get -> { returnedAirline11Doc.ContentAs<dynamic>() }");
var result = await userCluster.QueryAsync<dynamic>(
"SELECT * FROM `travel-sample`.inventory.airline LIMIT 2");
Console.WriteLine("query ->");
await foreach (var airline in result.Rows)
{
Console.WriteLine(airline);
}
await userCluster.DisposeAsync();
Further Reading
The SDK also contains management APIs for dealing with Cluster resources.