【发布时间】:2011-10-09 12:32:47
【问题描述】:
我有一个CustomAuthorize 属性,用于检查用户是否有权访问功能(用户或角色可以与分层功能集中的项目相关联)。
对于给定的操作方法...
[CustomAuthorize("Security.Admin.ManageWidgets.Update")]
这可行,但我担心对 Security 对象的更改可能会导致在运行时才能检测到的问题。我意识到我可以编写单元测试来减轻这种风险,但我想知道是否可以在编译时检查属性参数。我也喜欢让 Intellisense 帮我输入这个表达式。
理想情况下,我可以传递一个 lambda 表达式。
[CustomAuthorize(i => i.Admin.ManageWidgets.Update)]
不幸的是这个is not currently possible (additional info from Microsoft)。
我也尝试封装表达式,希望它会被评估,然后作为字符串传递给属性,但这也无法编译并出现相同的错误(表达式不能包含匿名方法或 lambda 表达式 )。
[CustomAuthorize(LambdaToString(i => i.Admin.ManageWidgets.Update))]
如何为我的自定义属性参数添加一些设计时/构建时支持?
【问题讨论】:
-
+1 解决一个有趣的问题。
标签: c# asp.net-mvc attributes lambda