Web アプリケーションにクレーム ベースのセキュリティを実装しようとしています。みたいなクラスがあります。
public class AuthorisationManager : ClaimsAuthorizationManager
{
public override bool CheckAccess(AuthorizationContext context)
{
//if (context.Principal.Identity.IsAdmin())
// return true;
var resource = context.Resource.First().Value;
var action = context.Action.First().Value;
return context.Principal.HasClaim(resource, action);
}
public override void LoadCustomConfiguration(System.Xml.XmlNodeList nodelist)
{
base.LoadCustomConfiguration(nodelist);
}
}
そして私は次のようなCustomPrincipleを持っています
public class CustomPrinciple : ClaimsPrincipal
{
public CustomPrinciple(IIdentity identity)
: base(identity)
{
}
}
context.Principal
WindowsPrinciple であるため、常に false を返します。Globas.asax.cs のように設定しようとしました
protected void Application_PostAuthenticateRequest(Object sender, EventArgs e)
{
HttpCookie authCookie = Request.Cookies[FormsAuthentication.FormsCookieName];
if (authCookie != null)
{
FormsAuthenticationTicket authTicket = FormsAuthentication.Decrypt(authCookie.Value);
PermissionManager mgr = new PermissionManager();
mgr.CheckUserAccess("", "");
mgr.LoadPermissionModel("XYZ");
HttpContext.Current.User = mgr.LoadPermissionModel("ABC");
Thread.CurrentPrincipal = HttpContext.Current.User;
AppDomain.CurrentDomain.SetThreadPrincipal(Thread.CurrentPrincipal);
}
}
を取得できるように変更するにはどうすればよいですCustomPrinciple
かCheckAccess(AuthorizationContext context)
ありがとう