c#Winform、WPF利用反射进行简单的权限控制

使用反射,获取窗体上的类型为Component的对象,根据对象名称到权限集合里判断是否有权限。


public class Permission
{
public virtual Dictionary GetPermissions(string moduleName)
{
Dictionary permissions = new Dictionary();
permissions.Add("button1",false);
return permissions;
}

    public void SetPermission(Form form)
    {
        Type t = form.GetType();
        FieldInfo[] fs = t.GetFields(BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Instance | BindingFlags.Static);
        IDictionary permissions = GetPermissions(form.Name);

        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 { }
            }
        }
    }
}


如果是WPF,则需要修改下,SetPermission的参数改成Window;判断改成

if (component is System.Windows.Controls.Control && permissions.ContainsKey(f.Name))
{
try
{

                    component.IsEnabled = permissions[f.Name];
                }
                catch { }
            }

GetPermissions方法根据模块名称,到数据库中获取相应的功能权限。

你可能感兴趣的:(c#Winform、WPF利用反射进行简单的权限控制)