0

だから私はこの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を使用する場合と比較することはできません。新しいビューモデルを作成して使用し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 に答える