public override void RemoveUsersFromRoles(string[] usernames, string[] roleNames) { SecUtility.CheckArrayParameter(ref usernames, true, true, InvalidUsernameCharacters, MAX_USERNAME_LENGTH, "usernames"); SecUtility.CheckArrayParameter(ref roleNames, true, true, InvalidRoleCharacters, MAX_ROLE_LENGTH, "roleNames"); // update all users' roles var roles = new List <string>(); foreach (var role in roleNames) { roles.Add(role.ToLowerInvariant()); } var users = new List <string>(); foreach (var username in usernames) { users.Add(username.ToLowerInvariant()); } var query = Query.In(ElementNames.LowercaseUsername, new BsonArray(users.ToArray())); var update = Update.PullAllWrapped <string>(ElementNames.Roles, roles); var result = _db.GetCollection <User>(_userCollectionName).Update(query, update, UpdateFlags.Multi, SafeMode.True); if (result.HasLastErrorMessage) { throw new ProviderException(result.LastErrorMessage); } }
public override void RemoveUsersFromRoles(string[] usernames, string[] roleNames) { SecUtility.CheckArrayParameter(ref usernames, true, true, InvalidUsernameCharacters, MAX_USERNAME_LENGTH, USER_NAMES); SecUtility.CheckArrayParameter(ref roleNames, true, true, InvalidRoleCharacters, MAX_ROLE_LENGTH, ROLE_NAMES); // update all users' roles var roles = roleNames.Select(role => role.ToLowerInvariant()).ToList(); var users = usernames.Select(username => username.ToLowerInvariant()).ToList(); var query = Builders <User> .Filter.In(ElementNames.LowercaseUsername, new BsonArray(users.ToArray())); var update = Builders <User> .Update.PullAll <string>(ElementNames.Roles, roles); var result = UserCollection.UpdateMany(query, update); }
public override void AddUsersToRoles(string[] usernames, string[] roleNames) { SecUtility.CheckArrayParameter(ref usernames, true, true, InvalidUsernameCharacters, MAX_USERNAME_LENGTH, "usernames"); SecUtility.CheckArrayParameter(ref roleNames, true, true, InvalidRoleCharacters, MAX_ROLE_LENGTH, "roleNames"); // ensure lowercase var roles = new List <string>(); foreach (var role in roleNames) { roles.Add(role.ToLowerInvariant()); } var users = new List <string>(); foreach (var username in usernames) { users.Add(username.ToLowerInvariant()); } // first add any non-existant roles to roles collection // a) pull all roles, filter out existing, push new // ...or // b) save all passed in roles foreach (var role in roles) { CreateRole(role); } // now update all users' roles var query = Query.In(ElementNames.LowercaseUsername, new BsonArray(users.ToArray())); var update = Update.AddToSetEachWrapped <string>(ElementNames.Roles, roles); var result = UserCollection.Update(query, update, UpdateFlags.Multi, SafeMode.True); if (result.HasLastErrorMessage) { throw new ProviderException(result.LastErrorMessage); } }