私はMVCプロジェクトで認証/認証を実装しています。私が直面している問題は、roles
、positions
、permissions
などのようなログインユーザーには多くの条件があることです。私は最善の方法は、AthorizeAttribute
をオーバーライドし、そこにコンストラクタの文字列配列としてデータを渡してすべてのロジックを設定し、それらを検証することだと思ったが、私は100以上の権限と40以上の位置があり、例えば60ポジションなどのあらゆるアクションを書きます。複数の認証条件でASP.MVC 5のオーソライズ属性をオーバーライドする方法?
私はそれらを何らかの形でグループ化できると思っていましたが、すべてのアクションがダイナミックで、グループのトンをuser permissions
とuser positions
にするため、それは良いポイントではないことがわかります。誰もが持っていた場合
...私はそこにすべての検証を行うためにベースコントローラを作成するためのいくつかの記事に赤いが、私はASP.NETのアイデンティティを使用していると私は「古い」ファッションの道に行くような `tのあなたの解決策を分かち合うと、私は感謝しています。
EDIT - ここ
public class XAuthorizeAttribute : AuthorizeAttribute
{
public XAuthorizeAttribute() { }
public XAuthorizeAttribute(params string[] roles)
{
Roles = string.Join(",", roles.Select(x => x));
}
protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
{
bool isAuthenticAttribute =
(filterContext.ActionDescriptor.IsDefined(typeof(XAuthorizeAttribute), true) ||
filterContext.ActionDescriptor.ControllerDescriptor.IsDefined(typeof(XAuthorizeAttribute), true)) &&
filterContext.HttpContext.User.Identity.IsAuthenticated;
if (!isAuthenticAttribute) return;
UrlHelper urlHelper = new UrlHelper(filterContext.RequestContext);
if (filterContext.HttpContext.User.Identity.IsAuthenticated)
{
IdentityManager.SignInManager.AuthenticationManager.SignOut(
DefaultAuthenticationTypes.ApplicationCookie, DefaultAuthenticationTypes.ExternalCookie);
}
filterContext.Result =
new RedirectResult(urlHelper.Action("Index", "Home", new {area = ""}));
base.HandleUnauthorizedRequest(filterContext);
}
}
のコード例を追加あなたは、私が唯一のちょうど想像60のロールと権限などを入れ、4つの役割を置く見ることができるように、アクション...
[XAuthorize("Administrator", "articlelists", "HOD Engineering", "HOD Interior"....)]
public ActionResult Index()
{
return View("Index");
}
ですこれは私のプロジェクトで私がここにあるような役割しか持っていないのでアイデアを得るためのデモです。
探しているものの実用的な例を追加できますか? – Amy