在运行时在ASP.NET MVC中配置安全性

时间:2010-03-21 02:53:17

标签: asp.net-mvc security configuration permissions

ASP.NET MVC中的安全性是否可以在运行时配置?例如,如果我有一个标记为

的控制器
[Authorize(Roles="Admin")]

有没有办法在运行时添加/删除角色?或者,您是否必须在代码中更改它并重新编译?

3 个答案:

答案 0 :(得分:1)

是的,您必须提供自己的IPrincipal实现,以实现这一目标。所有Authorize方法都是调用User.IsInRole(“Admin”)方法。

答案 1 :(得分:1)

我认为您需要这种功能,因为您在运行时添加了新角色,并且您正在尝试将它们连接到应用程序提供的功能。如果我的想法是正确的,那么你还必须有一个存储在某处的功能列表(在数据库或注册表或配置文件中)。鉴于这一切,我相信您将用户置于角色中并将角色附加到功能上,并将这些关系存储在数据存储区中。

所以尽管如此,你可能想要为你的行动提出一个自定义属性(装饰器)来说明像

这样的事情。
[AuthorizeUsers]

而不是

[Authorize(Roles="Admin")] 

因此发出对任何类型角色的任何引用,而是进入数据存储区并枚举所有关系并检查所有角色/用户及其应该说的权限。然后你要么拒绝他们的请求(例如,将他们返回到他们确实有权访问的另一个视图),或者给他们一个选择权限的选项(当你访问你没有权限的页面部分时,SharePoint会这样做) )。

有关如何创建自定义Authorize的确切代码示例,请转到ASP.NET MVC源代码 - System.Web.Mvc命名空间。

HTH

答案 2 :(得分:0)

如果您想构建自定义内容,可以创建自己的自定义授权方案。

看看AuthorizeAttribute - 这里是an article,它简单地比较了这两种机制。