コード例 #1
0
        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);
            }
        }
コード例 #2
0
        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);
        }
コード例 #3
0
        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);
            }
        }