gre*_*fly 5 .net c# user-interface aop authorization
我有一个关于为应用程序角色授权UI元素的最佳方法的一般性问题.我的意思是管理员可以看到普通用户看不到的按钮,菜单项等.这是什么最好的做法?
我意识到可能有多个基于角色的屏幕(一个管理员屏幕,同一个屏幕重复用户等),这看起来有点矫枉过正.我还想保留Separation of Concern,这样我的授权代码就不会与显示功能混合在一起.换句话说,我想避免:
if( current_user.IsInRole("administrator") )
button.Enabled = true;
Run Code Online (Sandbox Code Playgroud)
我一直在使用PostSharp查看Aspects,这看起来几乎就是我想做的事情,但它似乎并没有在逻辑上扩展到UI.
我确定我错过了什么,它是什么?
谢谢 -
您的代码最终可能会编译一个UI元素列表以隐藏,或执行给定的操作,然后根据当前角色执行这些操作.就像是
Dictionary<Control, Action<Control, string>> actions = new Dictionary<Control, Action<Control, string>>
{
{ button, (c, r) => c.Enabled = (r == "administrator") },
// etc.
};
Run Code Online (Sandbox Code Playgroud)
如何编译该列表主要是您的问题所关注的.AOP框架肯定有助于分离关注点,但自制解决方案并非不可能.我想的是:
EnableForRoleAttribute使用参数创建一个role.RoleVaryingAttribute您的创建装饰的表单).Control实例,然后对Control实例进行过滤EnableForRoleAttribute.Enabled根据角色设置.以上项目符号列表是特定于您的Enabled例子,主要是因为属性不能把lambda表达式作为参数:(,你会是一个更加灵活的SetPropertyIfInRoleAttribute与参数role,propertyName和propertyValue,或者任何这种结构.
基本上,AOP框架使这项工作更容易,而像PostSharp这样的一些框架使它在编译时而不是运行时发生.但自制软件解决方案也非常有效.
| 归档时间: |
|
| 查看次数: |
1549 次 |
| 最近记录: |