2011-11-08 38 views

回答

5
[Authorize(Roles = "admin")] 
public class AdminController : Controller 
{ 
} 

该属性也适用于控制器。

你甚至可以创建一个基本的控制器,并设置属性就可以了(并因此获得相同的授权上的所有衍生控制器)

[Authorize(Roles = "user")] 
public class BaseController : Controller 
{ 
} 

public class NewsController : BaseController 
{ 
} 

public class ForumController : BaseController 
{ 
    [HttpPost, Authorize(Roles="admin")] 
    public ActionResult Delete(int id) 
    { 
    } 
} 

更新

第一个问题:你可以把[HandleError]在您的基础控制器中获取MVC在所有控制器中的错误处理。我刚刚写了一个描述它的blog entry

第二个问题:是的。将最具体的[Authorize]属性放在操作上。 (例如授权基本控制器中的“用户”和编辑操作中的“管理员”)。

+0

我个人更喜欢有这种东西的基础控制器。 +1 – BigMike

+0

您在基本控制器中还放置了哪些其他的东西?想知道我是否错过了让事情变得更简单的机会。 –

+0

另一个相关的问题。假设我在控制器级别执行此操作。那么如果我想允许两个角色(例如“用户”和“管理员”)访问同一个动作,那怎么办?我可以在行动级别覆盖,我会怎么做? –

1

如果使用该属性标记控制器,则控制器中的所有操作方法都会受到限制。

1

是的,您所要做的就是将该属性放在您声明的类的顶部。

[Authorize(Roles = "admin")] 
public class TheController : Controller 

当你这样做的时候,那么这个控制器上的每个动作都将被检查为admin角色。

相关问题