反射控制权限 精细版

 
不过可以先帖上权限的核心控制部分的代码:

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, 结合一个表达是就可以搞定.

posted on 2013-06-09 13:42  西湖浪子  阅读(109)  评论(0)    收藏  举报