0

所以我一直在干预这个 MvcMembership 入门套件,到目前为止,这是我遇到的唯一麻烦的部分......

基本上,此成员资格用于_userService收集有关将用户分类为IPagedLists 的数据。

用户服务:

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方法。基本上,我试图将组管理员的可访问性限制为共享他其他角色的用户。例如,组管理员具有“组管理员”和“测试”角色,他将能够看到所有具有“测试”角色的用户。

正确获取用户角色并不是什么大问题。我只是希望这部分正确......如果可能的话......

4

1 回答 1

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
});
于 2012-09-24T12:54:17.527 回答