高分求权限管理代码(C#,winform)。。
一直特崇拜那种CheckListBox选择的方式分配权限,可不知到实现的原理是怎么回事。希望能提供一下原代看一下。 --------------------编程问答-------------------- Ding
路过并接分 --------------------编程问答-------------------- --------------------编程问答-------------------- 其实就是给用户,分配操作功能或者数据权限。。。。
用户;角色;功能权限.....找找文档应该很多 --------------------编程问答-------------------- 以下是至今在使用的代码,仅供参考
/// <summary>
/// clsUserRight 的摘要说明。
///********************* 在窗体中用户权限自动设定的实现 ***********************
///
///
///类 名:clsUserRight
///作 者:xlFancy
///日 期:2006-11-15
///功能说明:自动设定用户权限
///
///使用要求:在窗体模块中,System.Windows.Forms.Button类型控件请按以下格式命名
/// btnAddNew 、btnSave 新增、保存
/// btnUpdate 更新
/// btnDel 、btnDelete 删除
/// btnView 、btnQuery 浏览、查询
/// btnPreview 、btnPrint 打印预览、打印
/// btnImport 导入
/// btnExport 导出
///
///使用方法:在需设置用户权限的窗体的构造函数中,加入以下代码实现权限的自动设定
/// clsUserRight userRight=new clsUserRight(this.Name);
/// userRight.SetUserRight(this);
/// userRight.Dispose();
///
///修 改 者:
///修改日期:
///修改原因:
///
///****************************************************************************
/// </summary>
public class clsUserRight:clsBase
{
private string FunctionName=""; //子窗体的名称
private bool _AllowBrowse=false;
private bool _AllowAddNew=false;
private bool _AllowUpdate=false;
private bool _AllowDelete=false;
private bool _AllowView=false;
private bool _AllowImport=false;
private bool _AllowExport=false;
private bool _AllowPrint=false;
public clsUserRight(string functionName)
{
//
// TODO: 在此处添加构造函数逻辑
//
FunctionName=functionName; //子窗体的名称
}
public new void Dispose()
{
base.Dispose();
}
public bool AllowBrowse{ get { return _AllowBrowse; }}
public bool AllowAddNew{ get { return _AllowAddNew; }}
public bool AllowUpdate{ get { return _AllowUpdate; }}
public bool AllowDelete{ get { return _AllowDelete; }}
public bool AllowView{ get { return _AllowView; }}
public bool AllowImport{ get { return _AllowImport; }}
public bool AllowExport{ get { return _AllowExport; }}
public bool AllowPrint{ get { return _AllowPrint; }}
private bool GetUserRight()
{
try
{
cn.Open();
SqlDataAdapter da=new SqlDataAdapter("sys_GetUserRights",cn);
da.SelectCommand.CommandType=CommandType.StoredProcedure;
da.SelectCommand.Parameters.Add("@AppName",SqlDbType.NVarChar,100).Value="MAM"; //Application.ProductName; //应用程序名称
da.SelectCommand.Parameters.Add("@FunctionName",SqlDbType.VarChar,20).Value=FunctionName; //子窗体的名称
da.SelectCommand.Parameters.Add("@UserID",SqlDbType.VarChar,20).Value=clsUser.UserName; //用户名称
DataTable dt=new DataTable();
da.Fill(dt);
cn.Close();
if (dt.Rows.Count>0 )
{
string UserRights=dt.Rows[0][0].ToString();
_AllowBrowse=UserRights[0]=='1';
_AllowAddNew=UserRights[1]=='1';
_AllowUpdate=UserRights[2]=='1';
_AllowDelete=UserRights[3]=='1';
_AllowView=UserRights[4]=='1';
_AllowImport=UserRights[5]=='1';
_AllowExport=UserRights[6]=='1';
_AllowPrint=UserRights[7]=='1';
}
return true;
}
catch
{
return false;
}
}
public void SetUserRight(Form form)
{
GetUserRight();
for (int i=0;i<form.Controls.Count;i++ )
{
if (form.Controls[i].GetType().ToString()=="System.Windows.Forms.Button")
{
switch (form.Controls[i].Name.ToUpper())
{
case "BTNADDNEW": //新增、保存
case "BTNSAVE":
form.Controls[i].Enabled = this.AllowAddNew;
break;
case "BTNUPDATE": //更新
form.Controls[i].Enabled = this.AllowUpdate;
break;
case "BTNDEL": //删除
case "BTNDELETE":
form.Controls[i].Enabled = this.AllowDelete;
break;
case "BTNVIEW": //浏览、查询
case "BTNQUERY":
form.Controls[i].Enabled = this.AllowView;
break;
case "BTNPREVIEW": //打印预览、打印
case "BTNPRINT":
form.Controls[i].Enabled = this.AllowPrint;
break;
case "BTNIMPORT": //导入
form.Controls[i].Enabled = this.AllowImport;
break;
case "BTNEXPORT": //导出
form.Controls[i].Enabled = this.AllowExport;
break;
}
}
}
} --------------------编程问答-------------------- 角色;功能权限..... --------------------编程问答-------------------- 这个没啥好说的,就是给角色拼个字符串,用得时候取出来检查
还有就是给他个整数,用的时候拆开,比字符串要快很多 --------------------编程问答-------------------- honkerhero(孤独的流浪)
我也是用这个方法的。不过我在给 整数时会出现异常(将截断字符串或二进制数据。
语句已终止。)
public int UpdateDataBase(string tempStrSQL)
{
conn.Open();
SqlCommand comm = new SqlCommand(tempStrSQL, conn);
int intNumber = comm.ExecuteNonQuery(); //这里出现错误
conn.Close();
return intNumber;
} --------------------编程问答-------------------- 这类问题网上特别多,看一下人家怎么写就知道了。 --------------------编程问答-------------------- http://www.cnblogs.com/Roping/archive/2007/02/13/649161.html --------------------编程问答-------------------- http://www.cnblogs.com/Roping/archive/2007/02/13/649161.html
这个项目采用分层的方式进行组织开发,但是分层不够彻底!看他的项目组织方式可以看出他是WEB表示层(WEB)和应用层(core)两层的,
Core这个工程其实应该再分不同工程,以便在部署的时候,可以对不同的DLL进行引用!
1. DTO这个文件夹单分出来,作为不同层(物理也好。,罗辑也好)的传输对象,独立于不同的项目文件,最好让每个DTO对象继承一个抽象类,这样在做多态,注入,WBS等进行反射的时候可以节省很多代码(可以这里没有这样做)!
2. Domain这层是NHibernate的域模型层!主要采用hbm配置文件的方式实现对象的数据库映射关联!注意hbm文件采用潜入式资源的方式进行编译!这层代码基本上可以不用手写,呵呵,包括上面介绍的DTO也用手写,大家可以采用CodeSmith等工具进行生成,NHibernate本身也提供这样的工具NHibernate.Tool.hbm2net,我个人喜欢MyGeneration!
3. Service,这层就是我们通常讲的业务逻辑层,对于对象的CRUD操作都是在这层进行逻辑验证分类等,这里面的逻辑一般集中在业务领域逻辑,设计到数据层业务逻辑象数据表级联删除更新等逻辑在Domain配置文件已经做好,字段长度格式等验证我们已经在WEB做了验证!这个也符合我们通常做法!
4. NHHelper,这层是我们通常说说的数据访问层,对NB提供的对象持久化功能进行封装,实现对不同数据库的透明支持!同时也实现对NH中数据访问对象的Cache策略!
5. Util,这个项目镇的应该单独分出来,看项目名字你就知道了,提供常用的功能类!
这个项目我把它改写了下,引用最新的NHibernate的版本号是1.2.0.2003!
下载:点击
PS:解压缩后去掉后缀名Ropin然后再解压缩!
--------------------编程问答-------------------- 顶。学习 --------------------编程问答-------------------- 学习 --------------------编程问答-------------------- CheckBox选择给用户分配角色其实就是更新数据库中用户的某个字段的值。当你判断用户的权限时只要判断这个值就可以。。。。。。 --------------------编程问答-------------------- CheckBox选择给用户分配角色其实就是更新数据库中用户的某个字段的值。当你判断用户的权限时只要判断这个值就可以。。。。。。 --------------------编程问答-------------------- 这个简单,给你个方法你参考下 能行的:
#region 修改指定用户权限--------------------编程问答-------------------- 老贴 --------------------编程问答-------------------- 学习 --------------------编程问答-------------------- 学习 学习 谢谢 真的很好 --------------------编程问答-------------------- 学习,正准备在下一个项目中使用呢. --------------------编程问答-------------------- 权限管理其实不难。。。自己动手做做就知道了
/// <summary>
/// 修改指定用户的权限.
/// </summary>
/// <param name="GBox">GroupBox控件的数据集</param>
/// <param name="TName">获取用户编号</param>
public void Amend_Pope(Control.ControlCollection GBox, string TID)
{
string CheckName = "";
int tt = 0;
foreach (Control C in GBox)
{
if (C.GetType().Name == "CheckBox")
{
if (((CheckBox)C).Checked)
tt = 1;
else
tt = 0;
CheckName = C.Name;
string[] Astr = CheckName.Split(Convert.ToChar('_'));
MyDataClass.getsqlcom("update tb_UserPope set Pope=" + tt + " where (ID='" + TID + "') and (PopeName='" + Astr[1].Trim() + "')");
}
}
}
#endregion
补充:.NET技术 , C#