疯狂.NET 通用权限设计 C\S后台管理,B\S前台调用源码样例程序源码下载之 --- 角色权限...

其实,我跟金色海洋也无冤无仇的,大家也老别觉得怎么怎么了,其实我不想有任何敌人,敌人多了路不好走,又没什么仇恨,我是不会跟他树敌的,更何况我走的是权限解决的商品化的道路,他走的是开源白送的道路,大家都是写点儿代码混口饭吃的打工阶级,都在为解决温饱奋斗的小市民,何必互相斗呢,是吧。

他更多的服务于:花时间办事的人。
我更多的服务于:花钱办事的人。

不啰嗦,直奔主题,这些年,也看了很多人做的权限管理,也积极学习了别人解决问题的思路、方法,我不是天生就什么都会,我也是一直在学习别人的,站在别人的肩膀上,才有今天的那么一点点积累。

所谓见多识广吧,八仙过海各显神通,往往有些人用一些比较奇妙的、独特的思想解决实际问题,而且还解决得蛮有道理的,你想反驳人家也没的更好的说法,我今年就见过这么一个人,全部用角色来实现权限,你说人家外门邪道吧,还真不好这么说,只能说人家思路新颖,把问题解决得巧妙,你提问题出来吧,还真不太好驳倒人家,人家也都能解决问题。

用角色解决权限问题的意思是:我不判断这个人有什么权限,而是判断这个是属于哪个角色,这个角色又能做什么什么操作,例如他属于“财务人员”角色,就可以干什么了,他属于“公司管理层”又可以做哪些操作了,的确可以把日常开发中的问题也解决得很好,不能说人家这么解决问题有什么不好。

本文是接上一篇文章的,若上以篇没看过,请看如下文章:
疯狂.NET 通用权限设计 C\S后台管理,B\S前台调用源码样例程序源码下载之 --- 操作权限

若语言没能表达清楚我的意图,请看下图及配套的代码:
试验步骤如下:
(一)我通过疯狂.NET通用权限后台管理,给用户 吉日嘎拉,配置操作权限。
疯狂.NET 通用权限设计 C\S后台管理,B\S前台调用源码样例程序源码下载之 --- 角色权限..._第1张图片

(2)把用户 吉日嘎拉,归属于 “咨询顾问”这个角色,当然也可以用英文命名的,为了简单我就用中文命名吧。
疯狂.NET 通用权限设计 C\S后台管理,B\S前台调用源码样例程序源码下载之 --- 角色权限..._第2张图片

(3)我创建B\S项目,在 B\S 项目里引用我的通用权限的类库,劳动成果重复利用,不用每次都写了,
我的代码又可以在B\S项目里用,用可以在C\S项目里用,还可以支持多种数据库,这就是我骄傲的牛B之处。
疯狂.NET 通用权限设计 C\S后台管理,B\S前台调用源码样例程序源码下载之 --- 角色权限..._第3张图片

(4)我在B\S项目,编写按角色解决权限问题的代码效果,意思是属于哪个角色,这个人可以干什么什么?而不是这个人由于有某个权限,可以做什么什么操作,跟传统的思想有些不一样,哈哈。
疯狂.NET 通用权限设计 C\S后台管理,B\S前台调用源码样例程序源码下载之 --- 角色权限..._第4张图片

(5)我在B\S项目,按角色处理权限的运行效果如下。
当前用户属于“咨询顾问”角色里,未在“超级管理员”角色里。

疯狂.NET 通用权限设计 C\S后台管理,B\S前台调用源码样例程序源码下载之 --- 角色权限..._第5张图片

(6)我在B\S项目,中写的源码如下,供您参考:
ContractedBlock.gif ExpandedBlockStart.gif Code
  1//------------------------------------------------------------
  2// All Rights Reserved , Copyright (C) 2009 , Jirisoft , Ltd. 
  3//------------------------------------------------------------
  4
  5using System;
  6using System.Collections.Generic;
  7using System.Web;
  8using System.Web.UI;
  9using System.Web.UI.WebControls;
 10
 11namespace JiriSoft.Permission
 12ExpandedBlockStart.gifContractedBlock.gif{
 13    using DotNet.Common;
 14    using DotNet.Common.Utilities;
 15    using DotNet.Common.DbUtilities;
 16    using DotNet.Common.Model;
 17    using DotNet.Common.Business;
 18    using DotNet.Common.Service;
 19
 20ExpandedSubBlockStart.gifContractedSubBlock.gif    /**//// 
 21    /// _Default
 22    /// 
 23    /// 修改纪录
 24    /// 
 25    ///    版本:1.0 2009.09.06    JiRiGaLa    创建。
 26    ///    
 27    /// 版本:1.0
 28    /// 
 29    ///        JiRiGaLa
 30    ///        2009.09.06
 31    ///  
 32    /// 

 33    public partial class _Default : BasePage
 34ExpandedSubBlockStart.gifContractedSubBlock.gif    {
 35ExpandedSubBlockStart.gifContractedSubBlock.gif        /**//// 
 36        /// 用户的登录操作模拟
 37        /// 

 38        private void UserLogin()
 39ExpandedSubBlockStart.gifContractedSubBlock.gif        {
 40            this.Login("jirigala", String.Empty);
 41        }

 42
 43ExpandedSubBlockStart.gifContractedSubBlock.gif        /**//// 
 44        /// 测试数据连接
 45        /// 

 46        private void CheckDbConnection()
 47ExpandedSubBlockStart.gifContractedSubBlock.gif        {
 48            try
 49ExpandedSubBlockStart.gifContractedSubBlock.gif            {
 50                // 打开数据库
 51                this.DbHelper.Open();
 52                // 把数据库里的密码都设置为空
 53                String sqlQuery = " UPDATE " + BaseUserTable.TableName + " SET " + BaseUserTable.FieldUserPassword + " = NULL ";
 54                // 执行数据库更新语句
 55                this.DbHelper.ExecuteNonQuery(sqlQuery);
 56                // 事务开始
 57                this.DbHelper.BeginTransaction();
 58                // 事务递交
 59                this.DbHelper.CommitTransaction();
 60            }

 61            catch
 62ExpandedSubBlockStart.gifContractedSubBlock.gif            {
 63                // 事务回滚
 64                this.DbHelper.RollbackTransaction();
 65            }

 66            finally
 67ExpandedSubBlockStart.gifContractedSubBlock.gif            {
 68                // 关闭数据库连接
 69                this.DbHelper.Close();
 70            }

 71        }

 72
 73ExpandedSubBlockStart.gifContractedSubBlock.gif        /**//// 
 74        /// 显示当前用户的信息
 75        /// 

 76        private void ShowCurrentUserInfo()
 77ExpandedSubBlockStart.gifContractedSubBlock.gif        {
 78            this.lblUserInfo.Text = "用户的主键:" + this.UserInfo.ID + "
"
 79                + "用户名:" + this.UserInfo.Username + "
"
 80                + "姓名:" + this.UserInfo.Realname + "
"
 81                + "用户的公司主键:" + this.UserInfo.CompanyID + "
"
 82                + "用户的公司名称:" + this.UserInfo.CompanyFullName + "
"
 83                + "用户的部门主键:" + this.UserInfo.DepartmentID + "
"
 84                + "用户的部门名称:" + this.UserInfo.DepartmentFullName + "
"
 85                + "用户的工作组主键:" + this.UserInfo.WorkgroupID + "
"
 86                + "用户的工作组名称:" + this.UserInfo.WorkgroupFullName + "
";
 87
 88        }

 89
 90ExpandedSubBlockStart.gifContractedSubBlock.gif        /**//// 
 91        /// 获得用户的权限,操作权限
 92        /// 

 93        private void GetPermission()
 94ExpandedSubBlockStart.gifContractedSubBlock.gif        {
 95            this.DbHelper.Open();
 96
 97            // 用户的操作权限
 98            this.btnUserAdd.Enabled     = this.IsAuthorized("User.Add");
 99            this.btnUserDelete.Enabled  = this.IsAuthorized("User.Delete");
100            this.btnUserExport.Enabled  = this.IsAuthorized("User.Export");
101            this.btnUserImport.Enabled  = this.IsAuthorized("User.Import");
102            this.btnUserPrint.Enabled   = this.IsAuthorized("User.Print");
103            this.btnUserUpdate.Enabled  = this.IsAuthorized("User.Update");
104            // 角色的操作权限
105            this.btnRoleAdd.Enabled     = this.IsAuthorized("Role.Add");
106            this.btnRoleDelete.Enabled  = this.IsAuthorized("Role.Delete");
107            this.btnRoleExport.Enabled  = this.IsAuthorized("Role.Export");
108            this.btnRoleImport.Enabled  = this.IsAuthorized("Role.Import");
109            this.btnRolePrint.Enabled   = this.IsAuthorized("Role.Print");
110            this.btnRoleUpdate.Enabled  = this.IsAuthorized("Role.Update");
111
112            this.DbHelper.Close();
113        }

114
115ExpandedSubBlockStart.gifContractedSubBlock.gif        /**//// 
116        /// 按用户所在的角色来处理权限,角色权限
117        /// 
118        /// 虽然这么处理也蛮好的,但是总感觉灵活性有些不够,有些硬编码的感觉,
119        /// 程序的适应能力若,业务逻辑变了,需要修改的程序多一些。不管怎么说
120        /// 这是我见过的,比较有意思的权限处理模式,真的是有点儿怪,八仙过海。
121        /// 

122        private void GetPermissionByRole()
123ExpandedSubBlockStart.gifContractedSubBlock.gif        {
124            // 例如系统管理员角色,可以做任何用户管理方面的操作,这里是调用了SOA模式的服务程序
125            if (PermissionService.Instance.IsInRole(this.UserInfo, this.UserInfo.ID, "系统管理员"))
126ExpandedSubBlockStart.gifContractedSubBlock.gif            {
127                this.btnUserAdd.Enabled = true;
128                this.btnUserDelete.Enabled = true;
129                this.btnUserExport.Enabled = true;
130                this.btnUserImport.Enabled = true;
131                this.btnUserPrint.Enabled = true;
132                this.btnUserUpdate.Enabled = true;
133            }

134
135            // 例如咨询顾问,不可以作任何角色管理方面的操作
136            if (PermissionService.Instance.IsInRole(this.UserInfo, this.UserInfo.ID, "咨询顾问"))
137ExpandedSubBlockStart.gifContractedSubBlock.gif            {
138                this.btnRoleAdd.Enabled     = true;
139                this.btnRoleDelete.Enabled  = true;
140                this.btnRoleExport.Enabled  = true;
141                this.btnRoleImport.Enabled  = true;
142                this.btnRolePrint.Enabled   = true;
143                this.btnRoleUpdate.Enabled  = true;
144            }

145        }

146
147        protected void Page_Load(object sender, EventArgs e)
148ExpandedSubBlockStart.gifContractedSubBlock.gif        {
149            if (!Page.IsPostBack)
150ExpandedSubBlockStart.gifContractedSubBlock.gif            {
151                // 测试数据连接
152                this.CheckDbConnection();
153                // 用户的登录操作模拟
154                this.UserLogin();
155                // 显示当前用户的信息
156                this.ShowCurrentUserInfo();
157                // 获得用户的权限,操作权限
158                // this.GetPermission();
159                // 按用户所在的角色来处理权限,角色权限
160                this.GetPermissionByRole();
161            }

162        }

163    }

164}

165

只要能抓老鼠,就是好猫,不管是白猫还是黑猫,所以我的权限解决方案里,这2种对权限的处理方式是都默认支持的,你用哪个思路解决问题,都可以,这个就看用户的习惯了。

我也不想跟任何人争个什么出来,我为赚钱努力写代码,我了养家糊口拼命工作,我不是什么高尚的人,我为生存奔波,你觉得我的文章还可以,给你带来了一些,那你就别忘记按推荐按钮,表示鼓励。

下载相应的数据库点这里: /Files/jirigala/DotNet.Common_DB.rar
下载相应的演示程序源码,请堤点这里: /Files/jirigala/JiriSoft.Permission.rar

导读:
通过命名空间的细微差别,很直白的讲个人的那么点儿小算盘、个人的小利益与公司的大利益
疯狂.NET架构通用权限后台管理工具演示版2.0下载
通用权限实现的核心设计思想
一步步教你如何用疯狂.NET架构中的通用权限系统 -- 如何控制用户显示的菜单权限
一步步教你如何用疯狂.NET架构中的通用权限系统 -- 在页面中的调用权限讲解
一步步教你如何用疯狂.NET架构中的通用权限系统 -- 数据集权限的调用权限讲解
标准权限模型RBAC与实际日常开发工作结合后,我对RBAC模型的改进优化研究成果分享


淘宝店地址:
http://shop59297253.taobao.com/






你可能感兴趣的:(疯狂.NET 通用权限设计 C\S后台管理,B\S前台调用源码样例程序源码下载之 --- 角色权限...)