だから私はあなたが言っていると思います:ユーザーがperm1、perm2を持っている場合にのみActionAにアクセスでき、同様にユーザーがperm1とperm3を持っている場合にActionBにアクセスできます
私が与えたコードは説明用であり、コンパイルしませんでした。しかし、私が述べているアプローチの写真を提供します
ステップ 1: Flags 属性が付与されたパーミッション列挙型の作成に進むことができます
ステップ 2:データ ストアに格納されているユーザーのアクセス許可に基づいて、現在のプリンシパルにクレームを追加します。
ステップ 3:アクションが呼び出されたら、クレームに対してアクセスを許可する
[Flags]
enum PermType
{
None = 0x0,
Perm1 = 0x1,
perm2 = 0x2,
perm3 = 0x4,
perm4 = 0x8,
perm5 = 0x10
}
CurrentPrincipal へのクレームの追加
var currentPrincipal = ClaimsPrincipal.Current;
var cms = currentPrincipal.Claims;
var permissions = PermType.Perm1 | PermType.perm2;
var claims = cms.ToList();
claims.Add(new Claim("Action1", permissions.ToString()));
claims.Add(new Claim("Action2", permissions.ToString()));
claims.Add(new Claim("Action3", permissions.ToString()));
System.Threading.Thread.CurrentPrincipal = new ClaimsPrincipal(new ClaimsIdentity(claims));
ユーザーが特定のアクションにアクセスできるかどうかを確認します
public bool CanAccessThisAction(string acionName,PermType requiredPerms)
{
var claim = principal.Claims.FirstOrDefault(c => c.Type == acionName);
if (customPermissionClaim != null)
{
//check if required permission is present in claims for this user
//return true/false
}
return false;
}
オン アクション
public ActionResult TestAction(string id)
{
if(CanAccessThisAction("TestAction",PermType.Perm1|PermType.perm3|PermType.perm5))
{
//do your work here
}
else
{
//redirect user to some other page which says user is not authorized
}
}