ASP.NET MVC中的安全性是否可以在运行时配置?例如,如果我有一个标记为
的控制器[Authorize(Roles="Admin")]
有没有办法在运行时添加/删除角色?或者,您是否必须在代码中更改它并重新编译?
答案 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,它简单地比较了这两种机制。