由于我是ASP.NET身份的新手,当Jeremy Foster在演示如何使以下内容成为动态时提出问题时,我正在浏览有关MVA的视频:
[Authorize("Administrators, Users")]
public ActionResult SomeAction()
{
//Access to only admins and users
}
作为回答,Adam Tuliper表示可以使用声明以某种方式完成,但我没有在互联网上找到任何具体内容,或者我可能不理解。但如果有人能告诉我如何做到这一点,我将不胜感激。
这很重要,因为稍后,我可能希望允许SomeAction
被另一个角色访问,如果我需要每次都重新编译和部署我的应用程序,那么这是不好的。此外,我可能会向用户提供控制权以更改其他类型用户的访问权限。
过去我通过覆盖Authorize
属性完成此操作,我从cookie中提取用户的RoleId,并从数据库中检查用户是否有权访问所请求的操作。但不确定如何使用声明来完成。
答案 0 :(得分:0)
这样的事情怎么样: 您可以将它与数据库一起使用,或者只是在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);
}
}