WPF权限实例讲解

WPF权限实例讲解

权限顾名思义就是某人做某事的权利;在家里,在社会,以及国际间也同样纯在权限的限制。而我们做某些管理系统项目时就需要用到权限了,通过给角色,用户赋予或禁用对某些项目某块进行操作的权限;那么它具体是怎么实现的呢,主要有后台和数据库控制。本实例是用WPF的三层架构(DAL,BLL,WPF窗体程序项目)来做的,DAL是连接数据库的并定义连接操作数据库方法的层,知道在BLL如何调用DAL的方法即可;在BLL我们写的是通过传参数获取数据库存储过程具体的方法,在这里就不多做解释了
1、 首先在数据库建好权限某块表,用户表,用户角色表三张最基本的表,表如下
在这里插入图片描述
具体流程就是 用户角色功能模块(权限) 意思是角色拥有一定的权限,把角色赋予用户,用户同样也就拥有了对应的权限,个人的表达能力不好,看各位自己理解了。
2、写存储过程;因为我这里的是WPF的应用程序,所以查询语句就在数据库的存储过程中编写了。
在这里插入图片描述
首先声明需要的参数接收项目后台传来的数据,然后编写一个验证登录的查询语句,并且连表查询出用户对应的角色的权限(所能管理的模块);再查询不能操作的模块,并把模块组拆分成单个模块ID
2、 写权限维护的存储过程代码;
在这里插入图片描述
查询角色模块组信息和角色拥有所有模的ID
3、 数据库存储过程写完了,我们就去项目的BLL层写我们的逻辑代码,验证登录、查询模块权限信息等

namespace BLL
{
    [ServiceContract]
    public class US_LimitsOfPower
    {
       DAL.DALMethod myDALMethod = new DAL.DALMethod();

        //1.0查询操作信息(菜单)
        [OperationContract]      
        public DataSet Select_User_ByUseAndPwd(string strName,string strPwd)
        {
            SqlParameter[] SQLCMDpas ={
                                  new  SqlParameter ("@Type",SqlDbType.Char),
                                  new  SqlParameter ("@user_name",SqlDbType.Char),                                  new  SqlParameter ("@user_pwd",SqlDbType.Char),
                                              };
            SQLCMDpas[0].Value = "Select_User_ByUseAndPwd";
            SQLCMDpas[1].Value = strName;
            SQLCMDpas[2].Value = strPwd;
            DataSet myDataSet = myDALMethod.QueryDataSet("US_LimitsOfPower", SQLCMDpas);
            return myDataSet;
        }
        //1.1查询权限组表
        [OperationContract]       
        public DataSet Select_User_group()
        {
            SqlParameter[] SQLCMDpas ={
                                      new  SqlParameter ("@Type",SqlDbType.Char),
                                         };
            SQLCMDpas[0].Value = "Select_User_group";
            DataSet myDataSet = myDALMethod.QueryDataSet("US_LimitsOfPower", SQLCMDpas);
            return myDataSet;
        }

        //1.2查询权限组表
        [OperationContract]      
        public DataSet Select_FunctionByGroupPower(string strGroupPower)
        {
            SqlParameter[] SQLCMDpas ={ 
                                  new  SqlParameter ("@Type",SqlDbType.Char),
                                  new  SqlParameter ("@group_power",SqlDbType.Char),
                                              };
            SQLCMDpas[0].Value = "Select_FunctionByGroupPower";
            SQLCMDpas[1].Value = strGroupPower;
            DataSet myDataSet = myDALMethod.QueryDataSet("US_LimitsOfPower", SQLCMDpas);
            return myDataSet;
        }

        //1.3查询权限组表
        [OperationContract]
        public DataSet Select_AllFunction()
        {
            SqlParameter[] SQLCMDpas ={
                                         new  SqlParameter ("@Type",SqlDbType.Char),                                          
                                              };
            SQLCMDpas[0].Value = "Select_AllFunction";
            DataSet myDataSet = myDALMethod.QueryDataSet("US_LimitsOfPower", SQLCMDpas);          
            return myDataSet;
        }
        //1.4新增权限组
        [OperationContract]
        public int Insert_UserGroup(string strGroupName, string strGroupPower)
        {
            SqlParameter[] SQLCMDpas ={
                                      new  SqlParameter ("@Type",SqlDbType.Char),
                                      new  SqlParameter ("@group_name",SqlDbType.Char),
                                      new  SqlParameter ("@group_power",SqlDbType.Char),
                                              };
            SQLCMDpas[0].Value = "Insert_UserGroup";
            SQLCMDpas[1].Value = strGroupName;  
            SQLCMDpas[2].Value = strGroupPower;
            int count = myDALMethod.UpdateData("US_LimitsOfPower", SQLCMDpas);
            return count;
        }
        //1.5修改权限组
        [OperationContract]
        public int Update_UserGroup(string strGroupName, string strGroupPower,int intGroupId)
        {
            SqlParameter[] SQLCMDpas ={
                                  new  SqlParameter ("@Type",SqlDbType.Char),
                                   new SqlParameter ("@group_name",SqlDbType.Char),
                                   new  SqlParameter ("@group_power",SqlDbType.Char),
                                   new  SqlParameter ("@group_id",SqlDbType.Int),
                                          };
            SQLCMDpas[0].Value = "Update_UserGroup";
            SQLCMDpas[1].Value = strGroupName;
            SQLCMDpas[2].Value = strGroupPower;
            SQLCMDpas[3].Value = intGroupId;
            int count = myDALMethod.UpdateData("US_LimitsOfPower", SQLCMDpas);
            return count;
        }
        //1.6删除权限组
        [OperationContract]
        public int Delete_UserGroup(int intGroupId)
        {
            SqlParameter[] SQLCMDpas ={
                                          new  SqlParameter ("@Type",SqlDbType.Char),
                                          new  SqlParameter ("@group_id",SqlDbType.Int),
                                         };
            SQLCMDpas[0].Value = "Delete_UserGroup";
            SQLCMDpas[1].Value = intGroupId;
            int count = myDALMethod.UpdateData("US_LimitsOfPower", SQLCMDpas);
            return count;
        }
        //1.7查询不能操作的菜单功能
        [OperationContract]
        public DataSet Select_FunctionNotInUserGroup(string strGroupPower)
        {
            SqlParameter[] SQLCMDpas ={
                                     new  SqlParameter ("@Type",SqlDbType.Char),
                                    new  SqlParameter ("@group_power",SqlDbType.Char),
                                         };
            SQLCMDpas[0].Value = "Select_FunctionNotInUserGroup";
            SQLCMDpas[1].Value = strGroupPower;
            DataSet myDataSet = myDALMethod.QueryDataSet("US_LimitsOfPower", SQLCMDpas);
            return myDataSet;
        }
    }
}

4、 WPF的页面代码;页面则需要设置对应的矢量按钮来实现操作对应的模块,如图:
在这里插入图片描述
这只是一部分矢量按钮,具体操作思路就是数据库查询出来的模块代码来控制页面的控件显示隐藏;
5、 登录页面后台代码,验证登录并查询该用户对应角色的权限,并传到主页面;
在这里插入图片描述
主页面加载通过权限控制具体控件显示隐藏

 //页面加载事件 
        private void Main_Loaded(object sender, RoutedEventArgs e)
        {
            //权限调用
            LimitsOfPower();//权限调用
        }
     #region 权限应用(菜单的显示和隐藏)
        private void LimitsOfPower()
        {
            //显示的菜单
            DataTable dtYes = myLimitsOfPower.Select_FunctionByGroupPower(strGroupPowerV).Tables[0];
            //不能显示的菜单
            DataTable dtNo= myLimitsOfPower.Select_FunctionNotInUserGroup(strGroupPowerV).Tables[0];
            //循环遍历每个可显示的菜单控制菜单显示
            for (int i = 0; i < dtYes.Rows.Count; i++)
            {
                //调用方法获取按钮
                CalendarButton dtn = LoadButton(dtYes.Rows[i]["f_name"].ToString());
                //控制菜单按钮显示
                dtn.Visibility = Visibility.Visible;
            }
            //循环遍历每个不可显示的菜单控制隐藏
            for (int i = 0; i < dtNo.Rows.Count; i++)
            {
                //调用方法获取按钮
                CalendarButton dtn = LoadButton(dtNo.Rows[i]["f_name"].ToString());
                //控制菜单按钮隐藏
                dtn.Visibility = Visibility.Collapsed;
            }
        }
        #endregion
        #region 权限封装
        private Hashtable _Sfz = new Hashtable();//创建哈希表封装菜单(按钮)模块
        private  void LoadSfzHashTable()
        {
            _Sfz.Add("btnUpdatePassword", btnUpdatePassword);
            _Sfz.Add("btnStaffInformation", btnStaffInformation);
            _Sfz.Add("btnTravellerInformation", btnTravellerInformation);
            _Sfz.Add("btnStaffAccountManage", btnStaffAccountManage);
            _Sfz.Add("btnPowerManage", btnPowerManage);
            _Sfz.Add("btnSystemOperateLog", btnSystemOperateLog);
            _Sfz.Add("btnCreateLine", btnCreateLine);
            _Sfz.Add("btnStationManage", btnStationManage);
            _Sfz.Add("btnCompartment", btnCompartment);
            _Sfz.Add("btnCarOrder", btnCarOrder);
            _Sfz.Add("btnTicket", btnTicket);
            _Sfz.Add("btnTicketDetails", btnTicketDetails);
            _Sfz.Add("btnTicketPrice", btnTicketPrice);
            _Sfz.Add("btnSaleStatistics", btnSaleStatistics);
            _Sfz.Add("btnSitePeopleStream", btnSitePeopleStream);
            _Sfz.Add("btnWebShopTicketNumber", btnWebShopTicketNumber);
        }
        // 根据编号获得按钮
        public CalendarButton LoadButton(string strName)
        {
            //判断数据是否为空
            if (strName.Length != 0)
            {
                //判断哈希表是否有数据,没有就执行LoadSfzHashTable() 插入数据
                if (_Sfz.Count == 0) LoadSfzHashTable();
                //实例化矢量按钮,把查询出来的菜单按钮转换为矢量按钮
                CalendarButton btn = _Sfz[strName] as CalendarButton;
                if (btn == null) return null;
                //返回按钮
                return btn;
            }
            return null;
        } 

具体流程思路上面有注释就不一一解释了,其实不管审核类型的项目权限的思路基本都是这样的,Web类型的项目就是通过控制链接(URL)的显示。

C# + SQL Server 本系统包括两类用户:学生、管理员。管理员可以通过系统来添加管理员信息、修改管理员信息、添加学生信息、修改学生信息;开设课程、查询课程、录入成绩、统计成绩 管理系统是一种通过计算机技术实现的用于组织、监控和控制各种活动的软件系统。这些系统通常被设计用来提高效率、减少错误、加强安全性,同时提供数据和信息支持。以下是一些常见类型的管理系统: 学校管理系统: 用于学校或教育机构的学生信息、教职员工信息、课程管理、成绩记录、考勤管理等。学校管理系统帮助提高学校的组织效率和信息管理水平。 人力资源管理系统(HRM): 用于处理组织内的人事信息,包括员工招聘、培训记录、薪资管理、绩效评估等。HRM系统有助于企业更有效地管理人力资源,提高员工的工作效率和满意度。 库存管理系统: 用于追踪和管理商品或原材料的库存。这种系统可以帮助企业避免库存过剩或不足的问题,提高供应链的效率。 客户关系管理系统(CRM): 用于管理与客户之间的关系,包括客户信息、沟通记录、销售机会跟踪等。CRM系统有助于企业更好地理解客户需求,提高客户满意度和保留率。 医院管理系统: 用于管理医院或医疗机构的患者信息、医生排班、药品库存等。这种系统可以提高医疗服务的质量和效率。 财务管理系统: 用于记录和管理组织的财务信息,包括会计凭证、财务报表、预算管理等。财务管理系统
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值