所以我一直在干预这个 MvcMembership 入门套件,到目前为止,这是我遇到的唯一麻烦的部分......
基本上,此成员资格用于_userService
收集有关将用户分类为IPagedList
s 的数据。
用户服务:
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
方法。基本上,我试图将组管理员的可访问性限制为共享他其他角色的用户。例如,组管理员具有“组管理员”和“测试”角色,他将能够看到所有具有“测试”角色的用户。
正确获取用户角色并不是什么大问题。我只是希望这部分正确......如果可能的话......