使用fretje MvcMembership按角色列出的用户列表

时间:2012-09-24 12:43:01

标签: asp.net-mvc-3

所以我一直在干扰这个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的可访问性限制为共享其他角色的用户。例如,组管理员具有角色“组管理员”和“测试”,他将能够看到具有“测试”角色的所有用户。

正确获取用户角色并不是一个大问题。我只想让这部分变得正确......如果可能的话甚至......

1 个答案:

答案 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
});