美文网首页dotNET
c#Winform、WPF利用反射进行简单的权限控制

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

作者: czly | 来源:发表于2017-02-23 09:45 被阅读0次

    使用反射,获取窗体上的类型为Component的对象,根据对象名称到权限集合里判断是否有权限。
    <pre>
    public class Permission
    {
    public virtual Dictionary<string, bool> GetPermissions(string moduleName)
    {
    Dictionary<string, bool> permissions = new Dictionary<string, bool>();
    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<string, bool> 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 { }
                }
            }
        }
    }
    

    </pre>
    如果是WPF,则需要修改下,SetPermission的参数改成Window;判断改成
    <pre>
    if (component is System.Windows.Controls.Control && permissions.ContainsKey(f.Name))
    {
    try
    {

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

    </pre>

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

    相关文章

      网友评论

        本文标题:c#Winform、WPF利用反射进行简单的权限控制

        本文链接:https://www.haomeiwen.com/subject/rwemwttx.html