我有一个 CustomAuthorize
属性,用于检查用户是否有权访问功能(用户或角色可以与分层功能集中的项目相关联)。
对于给定的 Action 方法...
[CustomAuthorize("Security.Admin.ManageWidgets.Update")]
这行得通,但我担心对安全对象的更改可能会导致直到运行时才能检测到的问题。我意识到我可以编写单元测试来减轻这种风险,但我想知道是否可以在编译时检查属性参数。我也喜欢让 Intellisense 帮我输入这个表达式。
理想情况下,我可以传递一个 lambda 表达式。
[CustomAuthorize(i => i.Admin.ManageWidgets.Update)]
不幸的是这个is not currently possible (additional info from Microsoft)。
我还尝试封装表达式,希望它能被评估,然后作为字符串传递给属性,但这也未能编译并出现相同的错误(表达式不能包含匿名方法或 lambda 表达式 ).
[CustomAuthorize(LambdaToString(i => i.Admin.ManageWidgets.Update))]
如何为我的自定义属性参数添加一些设计时/构建时支持?
最佳答案
具有常量的静态类。
public static class Rights
{
public const string UpdateWidgets = "UpdateWidgets";
}
还包括用它们装饰的方法的单元测试,你会很不错。
[CustomAuthorize(Rights.UpdateWidgets)]
关于c# - 在设计/构建时检查自定义属性参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6764541/