反射控制权限 精细版
不过可以先帖上权限的核心控制部分的代码:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
/// <summary> /// 设置form上的组件的权限 /// </summary> /// <param name="form">控件所在的窗体</param> /// <param name="getPermissionsHandler">取得form里组件名及其Enabled属性(当前用户)的键值对</param> public static void SetPermissions(this Form form, Func<Form, IDictionary<string, bool>> getPermissionsHandler) { Type t = form.GetType(); FieldInfo[] fs = t.GetFields(BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Instance | BindingFlags.Static); IDictionary<string, bool> permissions = getPermissionsHandler(form); foreach (FieldInfo f in fs) { dynamic component = f.GetValue(form); if (component is System.ComponentModel.Component && permissions.ContainsKey(f.Name)) { try { component.Enabled = permissions[f.Name]; } catch { } } } } |
getPermissionsHandler可以使权限的获取方式与权限赋值分离, 以得到多种权限组合. Lambda, Linq, 结合一个表达是就可以搞定.
浙公网安备 33010602011771号