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

Asp.net mvc 运行时在ASP.NET MVC中配置安全性,asp.net-mvc,security,configuration,permissions,Asp.net Mvc,Security,Configuration,Permissions,是否可以在运行时配置ASP.NET MVC中的安全性?例如,如果我有一个已标记为 [Authorize(Roles="Admin")] 有没有办法在运行时添加/删除角色?或者,您必须在代码中对其进行更改并重新编译吗?是的,您必须提供自己的IPrincipal实现来实现这一点。Authorize方法所做的只是调用User.IsInRole(“Admin”)方法。如果您想构建自定义的内容,您可以创建自己的自定义授权方案 看看AuthorizeAttribute—下面是两种机制的简单比较。我想您需要

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

[Authorize(Roles="Admin")]

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

是的,您必须提供自己的IPrincipal实现来实现这一点。Authorize方法所做的只是调用User.IsInRole(“Admin”)方法。

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


看看AuthorizeAttribute—下面是两种机制的简单比较。

我想您需要这种功能,因为您正在运行时添加新角色,并试图将它们连接到应用程序提供的功能。如果我的想法是正确的,您还必须在某处存储一个功能列表(在DB或注册表或配置文件中)。考虑到所有这些,我相信您将用户置于角色中,并将角色附加到功能中,然后将这些关系存储在数据存储中

因此,考虑到所有这些,您可能希望为您的操作提供一个自定义属性(decorator),它会说

[AuthorizeUsers]
而不是

[Authorize(Roles="Admin")] 
因此,发出对任何类型角色的任何引用,而是进入数据存储,枚举所有关系,检查所有角色/用户及其权限。然后,您可以拒绝他们的请求(例如,将他们返回到他们确实有权访问的另一个视图),或者给他们一个选择权限的选项(就像您访问页面中您没有权限的部分时SharePoint所做的那样)

有关如何编写自定义授权的确切代码示例,请转到ASP.NET MVC源代码-System.Web.MVC命名空间