我试图从符合一组标准的用户组中保护我的MVC路由。由于MVC似乎使用了很多属性,而Steven Sanderson在他的专业MVC书中使用了一个用于安全扩展性的特性,所以我开始沿着这条路线前进,但是我想根据我正在应用的操作定义上下文规则。将Func作为属性参数传递以保护MVC路线
有些行为只针对员工,有些不行。
某些操作仅适用于company1,有些操作不适用。
所以我想这类型的使用...
[DisableAccess(BlockUsersWhere = u => u.Company != "Acme")]
public ActionResult AcmeOnlyAction()
{
...
}
[DisableAccess(BlockUsersWhere = u => u.IsEmployee == false)]
public ActionResult EmployeeOnlyAction()
{
...
}
看起来很干净,我和真的是很容易实现,但我得到以下编译器错误:
“BlockUsersWhere”不是有效的命名属性参数,因为它不是有效的属性参数类型
显然,您不能使用Func作为属性参数。任何其他建议来解决这个问题或其他的东西,提供了我们在MVC项目中所喜爱的简单用法。
谢谢,这是我想到的第一件事,但用这种方法,我失去了能够在上下文基础上创建独特规则而无需更新属性类。我可能会走下这条路。 – jjr2527 2010-07-29 14:42:38
是的,属性只能传达有限的信息量。他们应该只是关于分配元数据。更复杂的行为属于代码。 – marcind 2010-07-29 18:21:09