由于我是ASP.NET Identity的新手,我正在浏览MVA上的一段视频,Jeremy Foster在演示时问了一个问题,即如何使以下内容动态化:
[Authorize("Administrators, Users")]
public ActionResult SomeAction()
{
//Access to only admins and users
}
Adam Tuliper在回答时说,可以用Claims来完成,但我在互联网上找不到任何具体的东西,或者我可能不理解。但如果有人能告诉我如何做到这一点,我将不胜感激。
这一点很重要,因为以后,我可能希望允许SomeAction
由另一个角色访问,如果每次都需要重新编译和部署我的应用程序,那就不好了。此外,我可能会将控制权交给用户,以更改其他类型用户的访问权限。
在过去,我通过重写Authorize
属性来实现这一点,在该属性中,我从cookie中提取用户的RoleId,并从数据库中检查用户是否有权访问所请求的操作。但不确定如何使用Claims来完成。
这样的东西怎么样:您可以将其与数据库一起使用,也可以简单地在web.config中维护一个授权角色列表。
[AttributeUsage(AttributeTargets.Method, AllowMultiple = false, Inherited = true)]
public class MyCustomAuthorizationAttribute : AuthorizeAttribute
{
protected override bool AuthorizeCore(HttpContextBase httpContext)
{
// Do some logic here to pull authorised roles from backing store (AppSettings, MSSQL, MySQL, MongoDB etc)
...
// Check that the user belongs to one or more of these roles
bool isUserAuthorized = ....;
if(isUserAuthorized)
return true;
return base.AuthorizeCore(httpContext);
}
}