4

ユーザーをロールでフィルタリングする必要がありますが、すべてのユーザーは 2 つのロールに属しています

例:AdminGroup11 人のユーザーの場合、およびUserGroup1他のユーザーの場合。

Group1今、私はそれらを役割でフィルタリングし、無視Adminしたいと思いますUser

public ViewResult Index()
{
    string[] roles = Roles.GetRolesForUser();
    var group = string.Join(" ", roles ); 
    group = group.Replace("Admin", "");//Used this to single out Group1 from Admin user
    return View(new UserViewModel
                    {
                        Users = _userService.FindAll().Where(x => Roles.GetRolesForUser(x.UserName).Contains(group)),
                        Roles = roles
                    });
}

これはエラーにはなりませんが、空であることを示しています。原因はわかったのですが、どうすればいいのかわかりません...

4

3 に答える 3

2

了解しました。あなたの問題についての私の理解は、ユーザーが1つ以上の特定の役割を持っているかどうかを確認したいということです。その場合、アクセスを許可します。それ以外の場合は、アクセスを拒否し、ブラックホールに送ります。あなたの例では、特定の役割を1つだけチェックしたいようです。コメントのいくつかを読んで、ある時点で複数の役割を確認することもできます。ここで紹介するコード例では、ページにアクセスするためにユーザーに割り当てる必要のある1つ以上のロールのセットに対してユーザーをチェックできます。

string[] requiredRoles = new string[] { "Awesome", "Pancake" };
if (requiredRoles.Except(theUsersAssignedRoles).Any())
{
    // Authorization has failed!
    // The user is not awesome and they are not a pancake.
}
else
{
    // User is awesome and a pancake so let them through.
}

ここでの考え方は、必要なすべての役割のリストを取得し、ユーザーが自分に割り当てたすべての役割を差し引くことです。減算後にリストにロールが残っている場合、ユーザーは必要なロールのすべてを持っているわけではありません。ここにいくつかの例があります。上記のコードと同様に、承認に必要な役割は減算記号の左側にあり、ユーザーに割り当てられた役割は減算記号の右側にあります。

ユーザーは素晴らしく、パンケーキなので、アクセスが許可されます。空のセットになってしまうことに注意してください。これは、ユーザーが要件を満たしていることを意味します。

{ "Awesome", "Pancake" } - { "Awesome", "Pancake" } = { }

ユーザーは単なるパンケーキです。アクセスは許可されていません。結果のセットには「Awesome」が含まれているため、「Awesome」の役割が欠落しています。

{ "Awesome", "Pancake" } - { "Pancake" } = { "Awesome" }

このユーザーは素晴らしい人でもパンケーキでもありませんが、彼女は管理者です。それでも、このユーザーがアクセスを拒否されるように、ページに入るには素晴らしいパンケーキが必要です。

{ "Awesome", "Pancake" } - { "Admin" } = { "Awesome", "Pancake" }

ご不明な点がある場合や、ご希望に添えない場合は、コメントを残してください。必要に応じて、さらにサポートさせていただきます。

于 2012-10-04T01:42:49.033 に答える
2
public ViewResult Index()
{
   var roleFilter = Roles.GetRolesForUser().First(r => !r.equals("Admin"));

   return View(new UserViewModel
                {
                    Users = _userService.FindAll().Where(x => Roles.GetRolesForUser(x.UserName).Contains(roleFilter)),
                    Roles = new [] {roleFilter}
                });
}
于 2012-10-03T18:30:00.863 に答える
0

代わりにこの方法を使用しようとしているようです。

http://msdn.microsoft.com/en-us/library/system.web.security.roleprovider.getusersinrole.aspx

パラメーター

roleName タイプ:System.Stringユーザーのリストを取得するロールの名前。

于 2012-10-03T18:24:55.330 に答える