当前位置:编程学习 > C#/ASP.NET >>

高分求权限管理代码(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#
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,