所以我一直在干扰这个MvcMembership入门套件,到目前为止,这是我遇到的唯一麻烦的部分......
此会员资格基本上使用_userService
收集用户将数据排序为IPagedList
的数据。
用户服务:
public interface IUserService
{
int TotalUsers { get; }
int UsersOnline{ get; }
IPagedList<MembershipUser> FindAll(int pageIndex, int pageSize);
IPagedList<MembershipUser> FindByEmail(string emailAddressToMatch, int pageIndex, int pageSize);
IPagedList<MembershipUser> FindByUserName(string userNameToMatch, int pageIndex, int pageSize);
MembershipUser Get(string userName);
MembershipUser Get(object providerUserKey);
void Update(MembershipUser user);
void Delete(MembershipUser user);
void Delete(MembershipUser user, bool deleteAllRelatedData);
MembershipUser Touch(MembershipUser user);
MembershipUser Touch(string userName);
MembershipUser Touch(object providerUserKey);
MembershipUser Create(string username, string password, string email, string passwordQuestion, string passwordAnswer);
}
在控制器中它创建一个只读实例private readonly IUserService _userService;
使用它将数据收集到ViewModel:
public class IndexViewModel
{
public IPagedList<MembershipUser> Users { get; set; }
public IEnumerable<string> Roles { get; set; }
}
然后填充它并传递填充的数据以进行查看。
return View(new IndexViewModel
{
Users = _userService.FindAll(index ?? 0, PageSize),
Roles = _rolesService.FindAll()
});
现在我想要的是过滤与当前用户共享相同角色的用户。我得到了一个字符串的角色,但没有什么可以与使用Linq进行比较,当我尝试创建新的ViewModel并使用IEnumerable<User>
然后在那里得到所需的数据时,我得到各种各样的错误...请帮助,我'我真的卡住了......
更新
public ViewResult Index(int? index)
{
if (Roles.IsUserInRole("SUPER ADMIN GROUP"))
{
return View(new IndexViewModel
{
Users = _userService.FindAll(index ?? 0, PageSize),
Roles = _rolesService.FindAll()
});
else if (Roles.IsUserInRole("Group Admin"))
{
string[] roles = Roles.GetRolesForUser();
return View(new IndexViewModel
{
Users = (IPagedList<MembershipUser>)_userService.FindAll(index ?? 0, PageSize).Where(x => _rolesService.FindByUserName(x.UserName).SequenceEqual(roles)),
Roles = roles
});
}
return View();
}
这是我的Index
方法。基本上我正在尝试将Group Admin的可访问性限制为共享其他角色的用户。例如,组管理员具有角色“组管理员”和“测试”,他将能够看到具有“测试”角色的所有用户。
正确获取用户角色并不是一个大问题。我只想让这部分变得正确......如果可能的话甚至......
答案 0 :(得分:0)
您是否尝试过使用LINQ来仅保留与当前用户具有相同角色的用户:
string[] roles = Roles.GetRolesForUser();
return View(new IndexViewModel
{
Users = _userService
.FindAll(index ?? 0, PageSize)
.Where(
x => _rolesService.GetRolesForUser(x.UserName).SequenceEqual(roles)
),
Roles = roles
});