/// <summary>
 /// 将指定的用户赋予特定的角色。
 /// </summary>
 /// <param name="user">用户实体。</param>
 /// <param name="role">角色实体。</param>
 /// <returns>用以表述用户及其角色之间关系的实体。</returns>
 public UserRole AssignRole(User user, Role role)
 {
     if (user == null)
         throw new ArgumentNullException("user");
     if (role == null)
         throw new ArgumentNullException("role");
     UserRole userRole = _userRoleRepository.Find(Specification<UserRole>.Eval(ur => ur.UserID == user.ID));
     if (userRole == null)
     {
         userRole = new UserRole(user.ID, role.ID);
         _userRoleRepository.Add(userRole);
     }
     else
     {
         userRole.RoleID = role.ID;
         _userRoleRepository.Update(userRole);
     }
     _repositoryContext.Commit();
     return userRole;
 }
        /// <summary>
        /// 将指定的用户从角色中移除。
        /// </summary>
        /// <param name="user">用户实体。</param>
        /// <param name="role">角色实体,若为NULL,则表示从所有角色中移除。</param>
        public void UnassignRole(User user, Role role = null)
        {
            if (user == null)
                throw new ArgumentNullException("user");
            Expression<Func<UserRole, bool>> specExpression;
            if (role == null)
                // ReSharper disable ImplicitlyCapturedClosure
                specExpression = ur => ur.UserID == user.ID;
                // ReSharper restore ImplicitlyCapturedClosure
            else
                specExpression = ur => ur.UserID == user.ID && ur.RoleID == role.ID;

            var userRole = _userRoleRepository.Find(Specification<UserRole>.Eval(specExpression));

            if (userRole == null) return;
            _userRoleRepository.Remove(userRole);
            _repositoryContext.Commit();
        }
Esempio n. 3
0
        /// <summary>
        /// 将指定的用户从角色中移除。
        /// </summary>
        /// <param name="user">用户实体。</param>
        /// <param name="role">角色实体,若为NULL,则表示从所有角色中移除。</param>
        public void UnassignRole(User user, Role role = null)
        {
            if (user == null)
                throw new ArgumentNullException("user");
            Expression<Func<UserRole, bool>> specExpression = null;
            if (role == null)
                specExpression = ur => ur.UserID == user.ID;
            else
                specExpression = ur => ur.UserID == user.ID && ur.RoleID == role.ID;

            UserRole userRole = userRoleRepository.Find(Specification<UserRole>.Eval(specExpression));

            if (userRole != null)
            {
                userRoleRepository.Remove(userRole);
                repositoryContext.Commit();
            }
        }