权限管理的一点思路
来源:互联网 发布:海康摄像机网络不可达 编辑:程序博客网 时间:2024/05/23 22:18
在一个WinForm项目中的权限管理部分,使用MDI窗体,从主窗体上的menu打开MDI子窗体,对每个子窗体都有一个权限ID,打开时要判断user是否有权限,为了把校验这部分作的通用些,使用了下面的实现:
1.定义一个接口IRight,里面只有一个方法GetRightID,入下:
interface IRight
{
string GetRightID();
}
{
string GetRightID();
}
2.每个MDI子窗体都继承这个接口,在实现GetRightID中返回一个权限ID,例如:
public string GetRightID()
{
return "Customer";
}
{
return "Customer";
}
3.在主窗体上打开子窗体的地方,加上对权限的检验,例如:
Form2 f = new Form2();
if ( UserHaveRight(GetUserRights("Admin",f)) )
{
f.MDIParent = this;
f.Show();
}
else
{
f.Dispose();
}
if ( UserHaveRight(GetUserRights("Admin",f)) )
{
f.MDIParent = this;
f.Show();
}
else
{
f.Dispose();
}
其中调用的两个函数:
private bool UserHaveRight(ArrayList currentUserRights, IRight formWillOpen)
{
if ( currentUserRights.Contains(formWillOpen.GetRightID()) )
{
return true;
}
else
{
return false;
}
}
private ArrayList GetUserRight(string userID )
{
ArrayList result = new ArrayList();
result.Add("Customer");
result.Add("Premise");
return result;
}
{
if ( currentUserRights.Contains(formWillOpen.GetRightID()) )
{
return true;
}
else
{
return false;
}
}
private ArrayList GetUserRight(string userID )
{
ArrayList result = new ArrayList();
result.Add("Customer");
result.Add("Premise");
return result;
}
刚开始时是把GetRightID放在一个窗体基类里,MDI子窗体充这个基类继承然后override这个方法,后来作成从接口继承是考虑到这个接口还可以用在控件上,也就不仅仅是页面级的权限控制。
目前还有一个问题是,在检验时要先生成子窗体的实例,如果检验不通过还要释放掉,就有资源浪费,好在检查权限不通过的情况不多,目前这个办法还是可以接受的。如果有更好的办法,还请大家不吝赐教。
由于公司不能上网,这个post是我写在纸上到网吧里敲上来的代码只是说明问题,没有编译过,象GetUserRight也只是象征性的返回一个权限ID的集合,实际中有可能是DataSet或其他的。
- 权限管理的一点思路
- 权限管理的一点思路
- 权限管理组件的设计、开发思路
- RBAC权限管理的一点小改进
- 权限管理 思路
- 产品的一点思路
- 权限管理及实现思路
- 权限管理系统 设计思路
- OA办公自动化权限管理思路
- 权限管理数据库设计思路
- 基于角色的权限管理系统设计思路
- SysLog 学习的一点思路
- SysLog 学习的一点思路
- 多线程调试的一点思路
- 学习技术的一点思路
- SysLog 学习的一点思路
- 一点java的学习思路
- 局域网聊天|权限管理系统设计思路
- 彻底隐藏你的ip
- CRM引航汽车业
- 存储过程 VS 嵌入代码的sql语句
- 用C#操作XML
- Holiday Purchases Problems
- 权限管理的一点思路
- C#分析数据库结构,使用XSL模板自动生成代码
- 推荐一个WMI的查询分析器
- 发现一个好站点,推荐一下 (.net 开源项目)
- 也说Bug管理工具
- Shop Online Safely
- 获取Word文档的作者和主题
- 华为创业系
- 面向对象类设计的一些原则