权限管理的一点思路

在一个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或其他的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我可以为您提供一份C#图书管理系统的窗体设计和代码,但是由于篇幅限制,我只能提供部分代码和设计思路。希望对您有所帮助。 首先,我们需要确定系统的需求和功能,这里列举一些基本的需求: 1. 图书信息的录入、修改、查询和删除功能; 2. 读者信息的录入、修改、查询和删除功能; 3. 借阅、归还和续借功能; 4. 统计图书借阅情况和读者借阅情况; 5. 登录和权限管理功能。 接下来,我们可以开始设计窗体界面和相关代码。设计思路如下: 1. 首先,我们需要设计出主窗体和登录窗体。登录窗体用于用户登录系统,主窗体用于显示系统的主要功能界面。 2. 在主窗体中,我们需要添加一些控件,如菜单栏、工具栏、状态栏和数据表格等。菜单栏和工具栏用于设置系统的基本功能,状态栏用于显示系统的状态信息,数据表格用于显示图书和读者信息。 3. 在菜单栏和工具栏中,我们可以添加一些常用的功能,如添加、修改、删除、查询、借阅、归还、续借和统计等。这些功能可以通过代码实现,如添加图书信息可以通过对数据库的操作来实现。 4. 在数据表格中,我们需要显示图书和读者的信息,可以通过数据绑定来实现。当用户选择一条记录时,可以通过代码实现对该记录的修改、删除、借阅和归还等操作。 5. 在实现借阅和归还功能时,我们需要考虑库存的数量和借阅的日期等因素。可以通过代码来实现对这些信息的管理和控制。 6. 最后,我们需要实现登录和权限管理功能。登录功能可以通过输入用户名和密码来实现,权限管理功能可以通过对用户的权限进行设置来实现。 下面是一部分代码,用于实现添加图书信息的功能: ``` private void btnAdd_Click(object sender, EventArgs e) { string bookName = txtBookName.Text.Trim(); string author = txtAuthor.Text.Trim(); string publisher = txtPublisher.Text.Trim(); int totalNum = Convert.ToInt32(txtTotalNum.Text.Trim()); int remainNum = Convert.ToInt32(txtTotalNum.Text.Trim()); //插入数据 string strSql = "insert into BookInfo(BookName,Author,Publisher,TotalNum,RemainNum) values(@BookName,@Author,@Publisher,@TotalNum,@RemainNum)"; SqlParameter[] parameters = { new SqlParameter("@BookName", SqlDbType.NVarChar,50), new SqlParameter("@Author", SqlDbType.NVarChar,50), new SqlParameter("@Publisher", SqlDbType.NVarChar,50), new SqlParameter("@TotalNum", SqlDbType.Int), new SqlParameter("@RemainNum", SqlDbType.Int) }; parameters[0].Value = bookName; parameters[1].Value = author; parameters[2].Value = publisher; parameters[3].Value = totalNum; parameters[4].Value = remainNum; DBHelper.ExecuteNonQuery(strSql, parameters); } ``` 上面的代码中,我们首先获取用户输入的图书信息,然后通过SQL语句将数据插入到数据库中。 希望这份代码对您有所帮助。如果您还有其他问题,可以再问我哦。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值