各位大侠:做C#窗体的朋友来看看每做一个系统都有用户登录模块问问各位都是如何来控制权限的首先父窗体有菜单,子窗体上有按钮一般我们登录都会预先获取同户的登录信息和使用权限(一个表格数据)
用权限
想问一下,如何根据使用权限来控制菜单子项的Enabled可用和按钮的Enabled可用数据有:
1)使用权限数据表格
2).net 2005菜单menustrip
3)子窗体的按钮想根据使用权限设定他们的Enabled
用权限
想问一下,如何根据使用权限来控制菜单子项的Enabled可用和按钮的Enabled可用数据有:
1)使用权限数据表格
2).net 2005菜单menustrip
3)子窗体的按钮想根据使用权限设定他们的Enabled
也可以不用static 类,但为以后使用方便,建议采用static 类(因为在很多窗体中还要用到,不用在每个窗体中New一个对象).当用户成功登陆后将当前用户信息存在static 类中1、根据用户权限信息修改menustrip 每一子项的Enabled属性
2、在子窗体加载事件中也根据用户权限信息修改按钮的Enabled属性
我的建议是,VS2005中提供的menuStip和ToolStrip在visible和Enable在项目少的时候可以使用,项目一多根本就不能用,会累死你的(应为没有任何逻辑,甚至根本就没有逻辑、或者逻辑本身就是错的),
1.使用第三方控件ComponentOne,它的每一个菜单项都有一个事件是状态查询,你可以在此状态查询中设置菜单项的enable属性。
2.用VS自带的MenuStrip是所有的菜单项目不要静态的创建,所有的菜单项目都动态的创建,根据权限的不同,创建不同的菜单。这样避免没有权限的菜单项出现,避免更多的控制Enable的逻辑出现。
2,在函数中判断权限.(防止其他钩子程序进来修改菜单项的Enabled值或自己在代码中出错)我的处理办法,给每个函数一个权限值,菜单也可以.if(Competence("1003")==false){return;}这是查询是否有权限,有的话继续执行,没有的话,显示无权限返回.在Competence函数中有一个获取权限的函数,GetCompetence("1003"),返回值为BOOL值.
可以用在FORM的ONLOAD中
if(GetCompetence("1003")==false)menu**1.Enabled=false;
if(GetCompetence("1004")==false)menu**2.Enabled=false;
if(GetCompetence("1005")==false)menu**3.Enabled=false;
.....至于用户的权限在你的程序中是如何判断,这个不用我说了吧.
{
MultiView MV = (MultiView)ContentPlaceHolder1.FindControl("MultiView1");
if (啊啊 != null && 啊啊 != "准备登陆")
{
//Menu1.Items[0].ChildItems[1].Enabled = true;
//Menu3.Items[0].ChildItems[0].Enabled = true;
if (MV.ActiveViewIndex == 4)
{
Menu5.Items[0].ChildItems[0].Enabled = true;
Menu5.Items[0].ChildItems[1].Enabled = true;
}
else
{
Menu5.Items[0].ChildItems[0].Enabled = false;
Menu5.Items[0].ChildItems[1].Enabled = false;
}
KongZhi = true;
Label1.Text = "欢迎您" + Session["UserName"].ToString() + "同修!第" + Session["Usercs"].ToString() + "次使用本站!";
}
else
{
Menu1.Items[0].ChildItems[1].Enabled = false;
Menu3.Items[0].ChildItems[0].Enabled = false;
Menu5.Items[0].ChildItems[0].Enabled = false;
Menu5.Items[0].ChildItems[1].Enabled = false;
Label1.Text = "欢迎您光临!请登陆后记录修学计划日记。";
}
}这是网页形式的,窗体形式应该差不多道理,参考一下吧。
想一想,无论是用户、角色、操作员还是操作员组...统统可以视为用户,也就是授权的对象 二、授权目标 普通的权限管理可能就是用户、功能 或角色功能,但是对于一个庞大的公司,数据操作范围是受到限制的,如集团一公司的某部门人员只能操作他这个部门的数据... 因而,无论是功能,还是数据范围的限制,总之,他们是授权目标 三、操作权限
对于每个目标,对于功能来说,可能一般系统不限制操作,但对于数据来说,就要限制操作,如增、删、改、查等等 四、状态
状态如何保存?状态是个核心问题。
因为每一个项目都有它自己的状态,于是,就应用DataSet,把项目、操作、项目操作定义在数据集中,并建立关系,并提供方法获取本次操作中状态变化数据。 五、树
做一个接口,只要满足这个接口,授权对象就可以以树状形式展式,并提供了TreeHelper 六、外部接口
因为项目、操作是有关系的,控件加载后,势必要加载数据及相应状态。难道这些做控件时就知道了吗?非也,要想独立,必段提供外部接口以供初始他们的状态,于是用事件完成(见代码) 针对上面的分析,于是想出搞一个台项目-操作 控件
而加上授权对象,同时就可能操作多种 项目-操作 的集合 说干就干,上下班的路上想着思路,上班就写,很快搞出了两个控件。
(当然,如果加班的话,搞不出来噢,是对我而言,哈哈) 现把控件源码(注意是控件源码,不是全部的权限管理子系统源码,后者仅供培训学员学习和与三方合作之用)共享出来,你将从中收获如下:
1、关于TreeView的一些操作及TreeHelper
2、DataSet及相关知识与状态
3、其它一些啦 有了以上基础的朋友,可以不用关心啦... 祝大家工作快乐!!!
长江支流
QQ:150439795
TEL:13651078179
http://blog.csdn.net/flygoldfish
// 功能权限验证
/*
* iGongNengID : 功能ID
* iCaoZuo : 0 增加
1 修改
2 浏览
3 删除
iOperatorId 操作员的ID
* return bool : >=1 成功
<1 失败
*/
public static bool GongNengQXYZ(int iGongNengID, int iCaoZuo, int iOperatorId)
我的开源项目里有源码,还有流程图
http://lmcommon.codeplex.com/