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