これはカスタムです。データベースからのアクセス許可をチェックする権限。例えば たとえば、あなたが方法を持っている、あなたは許可アカウント、クライアント、構成 のための3 boolsを持っていて、あなたも2許可つのアクションに追加できるのActionResult
上の行の次の場所よりも、それらに基づいてユーザを制限したいですあなたは、データベースからboolsをチェックライン
[PermissionBasedAuthorize("Client, Account")]
これ以下の方法であり、以下を追加することができますよりも、アカウントとクライアントの許可によってアクセスされることができます。
public class PermissionBasedAuthorize : AuthorizeAttribute
{
private List<string> screen { get; set; }
public PermissionBasedAuthorize(string ScreenNames)
{
if (!string.IsNullOrEmpty(ScreenNames))
screen = ScreenNames.Split(',').ToList();
}
public override void OnAuthorization(HttpActionContext actionContext)
{
base.OnAuthorization(actionContext);
var UserId = HttpContext.Current.User.Identity.GetUserId();
ApplicationContext db = new ApplicationContext();
var Permissions = db.Permissions.Find(UserId);
if (screen == null || screen.Count() == 0)
{
actionContext.Response = new HttpResponseMessage(System.Net.HttpStatusCode.Unauthorized);
}
bool IsAllowed = false;
foreach (var item in screen)
foreach (var property in Permissions.GetType().GetProperties())
{
if (property.Name.ToLower().Equals(item.ToLower()))
{
bool Value = (bool)property.GetValue(Permissions, null);
if (Value)
{
IsAllowed = true;
}
break;
}
}
if (!IsAllowed)
{
actionContext.Response = new HttpResponseMessage(System.Net.HttpStatusCode.Unauthorized);
}
}
}
トークンにクレーム(oAuthなど)を使用すると、トークンには「ロール」というクレームが付きます。サイトがこのトークンを受け取ると、プリンシパルオブジェクトを作成し、ロールクレームのロールに基づいてロールを設定します。そうすれば、標準の 'AuthorizeAttribute'や独自の' AuthLogAttribute'を使い続けることができます –
私はこの分野で知識が不十分です。詳細とガイダンスで話し合っている記事にリダイレクトすることができます。ありがとう –