/// <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(); }
/// <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(); } }