2011-08-10 78 views
8

使用Authorize属性我可以指定允许访问资源的角色。ASP.NET授权属性和管理员用户角色

[Authorize(Roles="User")] 

但如果我有被允许去任何资源,我需要指定该之一,也是

[Authorize(Roles="User, Administrator")] 

管理员用户,但可能有一些办法可以在某种程度上说,管理员允许去任何地方,而不是在授权属性中指定这一个?

所以,我的意思是,如果某处(在控制器或行动)代码将是这[Authorize(Roles="User")]这意味着管理员角色允许去那里。

或者我可能会将它设置为全部动态授权角色应用程序启动时的方式?

任何想法?

更新:

目前,我有一个管理控制器授权属性[Authorize(Role="Administrator")]和我在属性[Authorize(Role="User")]一些其他控制器的一些动作,所以我需要添加"Administrator"有作为,如果我没有找到更好的解决办法。

+0

是我的解决方案的任何帮助? – LeftyX

回答

2

我认为这会对你有用。使用AuthorizeAttribute创建您自己的基础控制器,然后让其他控制器继承您的基类。

[Authorize(Roles="Admin")] 
public class MyFancyController : Controller 
{ 
} 

[Authorize(Roles = "TaxPayer")] 
public class WizardController : MyFancyController 
{ 
... 

虽然在我看来这是可怕的。

你有多少个控制器/动作?如果您稍后忘记了这一点,或者您有一个您不希望管理员访问的页面,该怎么办?

调试代码会变得更困难吗?

+0

我认为这是一个很好的观点,如果我不希望管理员访问的地方。问题已更新 – Joper

1

您可以创建自定义过滤器并使用它来装饰您的动作或控制器。 这是一种结构简单,我用了很多:

public class AuthorizationAttribute : ActionFilterAttribute 
{ 
    public override void OnActionExecuting(ActionExecutingContext filterContext) 
    { 
     if (!filterContext.HttpContext.User.Identity.IsAuthenticated) 
      { 
      filterContext.Result = new HttpUnauthorizedResult(); 
      return; 
     } 

     var actionName = filterContext.ActionDescriptor.ActionName; 
     var controllerName = filterContext.Controller.GetType().Name; 

     bool isAuthorized =false; 

     // Put your logic here !!!! 

     if (!isAuthorized) { 
      filterContext.Result = new HttpUnauthorizedResult();   
      return; 
     } 
    } 
} 

你可以阅读一些here

2
[Authorize(Roles = "User, Admin")] 
public class PrestamosController : Controller 
{ 
    // controller details 
} 
+0

如果您解释了您发布的代码,它会更好。 – 2012-10-28 00:37:29

0

这是我做的:确保用户谁在“管理”角色也在“用户”角色中。

0

您需要的概念静态角色运行时角色。下面是一个简单的例子:

你的角色列表及其级别:

  • 角色:管理员|级别:1
  • 作用:编辑|级别:2
  • 作用:查看器|等级:3

用户和他们的静态角色(静态角色是你分配给用户的角色):

  • 用户:约翰|角色:Admin
  • 用户:Sam |作用:编辑
  • User:Peter |角色:查看器

在运行时,通过使用静态角色和角色级别生成运行时角色,具有更高级别角色的用户自动获取较低级别的角色。因此,在计算之后,这些用户的运行时角色将为:

  • User:John |角色:Admin,Editor,Viewer
  • User:Sam |角色:编辑器,查看器
  • User:Peter |角色:查看器

然后,您可以简单地使用[Authorize(Roles =“Viewer”)],具有更高级别权限的用户(例如John,Sam)也可以访问它。因为它们在运行时还必须具有查看器角色。

使用静态角色和运行时角色的关键是静态角色使角色分配更容易。而运行时角色使资源授权更加容易。

相关问题