【发布时间】:2017-09-23 22:25:01
【问题描述】:
我有一个 MVC 5 C# Intranet Web 应用程序,我们在其中使用了 30 多个 Active Directory 角色,并且由于业务文化,权限经常发生变化。
为了方便我自己,我想我会尝试这样的事情来确定允许谁访问控制器操作或子操作。
/* This function runs a LINQ query and outputs a comma delimited string of
approved active directory roles.
*/
private static string _approvedRoles =
Helpers.QueryableExtensions.GetApprovedRoles("FourCourseAudit");
// GET: FourCourseAudits
[Authorize(Roles = _approvedRoles)]
public ActionResult Index(string searchBy="All",
string orderBy="Campus", string orderDir="Asc")
{
// and so on...
不幸的是,我收到了这个编译时错误:An attribute argument must be a constant expression, typeof expression or array creation expression of an attribute parameter type。
这是我尝试使用 _approvedRoles 变量的其他方法(例如 public const string 和 public string)之后的位置。我将GetApprovedRoles 函数放置在模型、存储库(现在所在的位置)和控制器主体中。
我知道这些角色很好,因为如果我使用这个:[Authorize(Roles="DOMAIN\Role1,DOMAIN\Role2")] 它可以工作。这对我来说不是一个可行的选择,因为角色发生了变化,而且这是一个非常大的 MVC 站点。有什么方法可以让 Roles 成为变量吗?
【问题讨论】:
-
属性(如错误所示)不是动态的,因为它们不能具有更改运行时的值。我不在 ASP 中使用 MVC,但我使用的其他框架允许我检查请求的上下文以获取用户的角色并在方法内进行比较,如果不允许则返回错误...
-
所以你要覆盖属性
标签: c# asp.net-mvc