中国IT动力,最新最全的IT技术教程
最新100篇 | 推荐100篇 | 专题100篇 | 排行榜 | 搜索 | 在线API文档 | 网通镜像
首 页 | 程序开发 | 操作系统 | 软件应用 | 图形图象 | 网络应用 | 精文荟萃 | 教育认证 | 硬件维护 | 未整理篇 | 站长教程
ASP JS PHP工程 ASP.NET 网站建设 UML J2EESUN .NET VC VB VFP 网络维护 数据库 DB2 SQL2000 Oracle Mysql
服务器 Win2000 Office C DreamWeaver FireWorks Flash PhotoShop 上网宝典 CorelDraw 协议大全 网络安全 微软认证
硬件维护  CPU  主板  硬盘  内存  显卡  显示器  键盘鼠标  声卡音箱  打印机  机箱电源  BIOS  网卡  C#  Java  Delphi  vs.net2005
  当前位置:> 程序开发 > 编程语言 > .NET > 临时文章
权限管理的一点思路
作者:未知 时间:2004-11-18 12:12 出处:Blog 责编:chinaitpower
              摘要:暂无

在一个WinForm项目中的权限管理部分,使用MDI窗体,从主窗体上的menu打开MDI子窗体,对每个子窗体都有一个权限ID,打开时要判断user是否有权限,为了把校验这部分作的通用些,使用了下面的实现:
1.定义一个接口IRight,里面只有一个方法GetRightID,入下:

interface IRight
{
    
string GetRightID();
}

2.每个MDI子窗体都继承这个接口,在实现GetRightID中返回一个权限ID,例如:
public string GetRightID()
{
     
return "Customer";
}

3.在主窗体上打开子窗体的地方,加上对权限的检验,例如:
Form2 f = new Form2();
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;
}


刚开始时是把GetRightID放在一个窗体基类里,MDI子窗体充这个基类继承然后override这个方法,后来作成从接口继承是考虑到这个接口还可以用在控件上,也就不仅仅是页面级的权限控制。

目前还有一个问题是,在检验时要先生成子窗体的实例,如果检验不通过还要释放掉,就有资源浪费,好在检查权限不通过的情况不多,目前这个办法还是可以接受的。如果有更好的办法,还请大家不吝赐教。

由于公司不能上网,这个post是我写在纸上到网吧里敲上来的代码只是说明问题,没有编译过,象GetUserRight也只是象征性的返回一个权限ID的集合,实际中有可能是DataSet或其他的。
关闭本页
 
首页 | 投资与合作 | 服务条款 | 隐私政策 | 收藏本站 | 设为首页 | 新用户注册 | 免责声明 | 使用帮助
Copyright ©2005-2008 chinaitpower.com All rights reserved. www.chinaitpower.com 版权所有