A newer version of this documentation is available.

View Latest
March 16, 2025
+ 12
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:

Creating Users
csharp
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);
Listing Users
csharp
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:

csharp
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.