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

使用反射,获取窗体上的类型为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方法根据模块名称,到数据库中获取相应的功能权限。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,314评论 19 139
  • 1、窗体 1、常用属性 (1)Name属性:用来获取或设置窗体的名称,在应用程序中可通过Name属性来引用窗体。 ...
    Moment__格调阅读 10,024评论 0 11
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 175,049评论 25 709
  • “工作太忙了”“领导好SB,一天到晚就知道开一些然并卵的会”“这个工作没前途,想换工作但是好怕失业”“没车没房没钱...
    蓝小蓟阅读 4,845评论 1 0
  • 昨天跟一个高中老朋友小聚,吃吃东西,看看电影,间歇便找了个冷饮店坐下来,聊聊家常。我们都是二十大几岁,都是刚刚成了...
    Z大调阅读 1,378评论 0 0