我的目标就是,权限想定义什么权限就定义什么权限,想搞几个权限就搞几个权限,只要一行代码就可以在程序里准确判断,用最少的参数,用最最简单的方法,通用程序判断程序运行得铜墙铁壁一样稳定,这就是我的追求。
废话少说我主要讲解的7个方向为:
1。操作权限,按钮级权限
2。角色的判断,用户是否属于某个角色的判断
3。拒绝权限,反正常思维的权限
4。单元格权限,脑筋急转弯的权限处理方式
5。数据列权限,字段列级权限
6。数据集过滤权限,数据行级过滤权限
7。页面级权限,模块菜单权限处理
试验步骤如下:
(一)我通过疯狂.NET通用权限后台管理,给用户 吉日嘎拉,配置操作权限。
(2)给用户 吉日嘎拉,配置如下页面中所选中的操作权限。
(3)把用户 吉日嘎拉,归属于 “咨询顾问”这个角色,当然也可以用英文命名的,为了简单我就用中文命名吧。
(4)我创建B\S项目,在 B\S 项目里引用我的通用权限的类库,劳动成果重复利用,不用每次都写了,
我的代码又可以在B、S项目里用,用可以在C\S项目里用,还可以支持多种数据库,这就是我骄傲的牛B之处。
(5)我在B\S项目,编写的代码效果。
(6)我在B\S项目,运行程序后的效果,这里有2排按钮,运行的结果与我们设置的效果是完全符合的。
(7)我在B\S项目,中写的源码如下,供您参考:
1 //------------------------------------------------------------
2 // All Rights Reserved , Copyright (C) 2009 , Jirisoft , Ltd.
3 //------------------------------------------------------------
4
5 using System;
6 using System.Collections.Generic;
7 using System.Web;
8 using System.Web.UI;
9 using System.Web.UI.WebControls;
10
11 namespace JiriSoft.Permission
12 {
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
20 /// <remarks>
21 /// _Default
22 ///
23 /// 修改纪录
24 ///
25 /// 版本:1.0 2009.09.06 JiRiGaLa 创建。
26 ///
27 /// 版本:1.0
28 /// <author>
29 /// <name>JiRiGaLa</name>
30 /// <date>2009.09.06</date>
31 /// </author>
32 /// </remarks>
33 public partial class _Default : BasePage
34 {
35 /// <summary>
36 /// 用户的登录操作模拟
37 /// </summary>
38 private void UserLogin()
39 {
40 this.Login("jirigala", String.Empty);
41 }
42
43 /// <summary>
44 /// 测试数据连接
45 /// </summary>
46 private void CheckDbConnection()
47 {
48 try
49 {
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
62 {
63 // 事务回滚
64 this.DbHelper.RollbackTransaction();
65 }
66 finally
67 {
68 // 关闭数据库连接
69 this.DbHelper.Close();
70 }
71 }
72
73 /// <summary>
74 /// 显示当前用户的信息
75 /// </summary>
76 private void ShowCurrentUserInfo()
77 {
78 this.lblUserInfo.Text = "用户的主键:" + this.UserInfo.ID + "<br>"
79 + "用户名:" + this.UserInfo.Username + "<br>"
80 + "姓名:" + this.UserInfo.Realname + "<br>"
81 + "用户的公司主键:" + this.UserInfo.CompanyID + "<br>"
82 + "用户的公司名称:" + this.UserInfo.CompanyFullName + "<br>"
83 + "用户的部门主键:" + this.UserInfo.DepartmentID + "<br>"
84 + "用户的部门名称:" + this.UserInfo.DepartmentFullName + "<br>"
85 + "用户的工作组主键:" + this.UserInfo.WorkgroupID + "<br>"
86 + "用户的工作组名称:" + this.UserInfo.WorkgroupFullName + "<br>";
87
88 }
89
90 /// <summary>
91 /// 获得用户的权限
92 /// </summary>
93 private void GetPermission()
94 {
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
115 protected void Page_Load(object sender, EventArgs e)
116 {
117 if (!Page.IsPostBack)
118 {
119 // 测试数据连接
120 this.CheckDbConnection();
121 // 用户的登录操作模拟
122 this.UserLogin();
123 // 显示当前用户的信息
124 this.ShowCurrentUserInfo();
125 // 获得用户的权限
126 this.GetPermission();
127 }
128 }
129 }
130 }
131
当然你也可以把 private void GetPermission() 函数进行以下优化,搞个循环遍历啥的,
能自动绑定权限状态,那就彻底全自动绑定操作权限了,不用每个人都自己写对应的权限
判断了,我不喜欢那么万能的东西,还是喜欢想怎么控制就怎么控制。
2 // All Rights Reserved , Copyright (C) 2009 , Jirisoft , Ltd.
3 //------------------------------------------------------------
4
5 using System;
6 using System.Collections.Generic;
7 using System.Web;
8 using System.Web.UI;
9 using System.Web.UI.WebControls;
10
11 namespace JiriSoft.Permission
12 {
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
20 /// <remarks>
21 /// _Default
22 ///
23 /// 修改纪录
24 ///
25 /// 版本:1.0 2009.09.06 JiRiGaLa 创建。
26 ///
27 /// 版本:1.0
28 /// <author>
29 /// <name>JiRiGaLa</name>
30 /// <date>2009.09.06</date>
31 /// </author>
32 /// </remarks>
33 public partial class _Default : BasePage
34 {
35 /// <summary>
36 /// 用户的登录操作模拟
37 /// </summary>
38 private void UserLogin()
39 {
40 this.Login("jirigala", String.Empty);
41 }
42
43 /// <summary>
44 /// 测试数据连接
45 /// </summary>
46 private void CheckDbConnection()
47 {
48 try
49 {
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
62 {
63 // 事务回滚
64 this.DbHelper.RollbackTransaction();
65 }
66 finally
67 {
68 // 关闭数据库连接
69 this.DbHelper.Close();
70 }
71 }
72
73 /// <summary>
74 /// 显示当前用户的信息
75 /// </summary>
76 private void ShowCurrentUserInfo()
77 {
78 this.lblUserInfo.Text = "用户的主键:" + this.UserInfo.ID + "<br>"
79 + "用户名:" + this.UserInfo.Username + "<br>"
80 + "姓名:" + this.UserInfo.Realname + "<br>"
81 + "用户的公司主键:" + this.UserInfo.CompanyID + "<br>"
82 + "用户的公司名称:" + this.UserInfo.CompanyFullName + "<br>"
83 + "用户的部门主键:" + this.UserInfo.DepartmentID + "<br>"
84 + "用户的部门名称:" + this.UserInfo.DepartmentFullName + "<br>"
85 + "用户的工作组主键:" + this.UserInfo.WorkgroupID + "<br>"
86 + "用户的工作组名称:" + this.UserInfo.WorkgroupFullName + "<br>";
87
88 }
89
90 /// <summary>
91 /// 获得用户的权限
92 /// </summary>
93 private void GetPermission()
94 {
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
115 protected void Page_Load(object sender, EventArgs e)
116 {
117 if (!Page.IsPostBack)
118 {
119 // 测试数据连接
120 this.CheckDbConnection();
121 // 用户的登录操作模拟
122 this.UserLogin();
123 // 显示当前用户的信息
124 this.ShowCurrentUserInfo();
125 // 获得用户的权限
126 this.GetPermission();
127 }
128 }
129 }
130 }
131
当然你也可以把 private void GetPermission() 函数进行以下优化,搞个循环遍历啥的,
能自动绑定权限状态,那就彻底全自动绑定操作权限了,不用每个人都自己写对应的权限
判断了,我不喜欢那么万能的东西,还是喜欢想怎么控制就怎么控制。