我的目标就是,权限想定义什么权限就定义什么权限,想搞几个权限就搞几个
权限,只要一行代码就可以在程序里准确判断,用最少的参数,用最最简单的
方法,通用程序判断程序运行得铜墙铁壁一样稳定,这就是我的追求。
废话少说我主要讲解的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() 函数进行以下优化,搞个循环遍历啥的,
能自动绑定权限状态,那就彻底全自动绑定操作权限了,不用每个人都自己写对应的权限
判断了,我不喜欢那么万能的东西,还是喜欢想怎么控制就怎么控制。
下载相应的数据库点这里: /Files/jirigala/DotNet.Common_DB.rar
下载相应的演示程序源码,请堤点这里: /Files/jirigala/JiriSoft.Permission.rar
导读:
通过命名空间的细微差别,很直白的讲个人的那么点儿小算盘、个人的小利益与公司的大利益
疯狂.NET架构通用权限后台管理工具演示版2.0下载
通用权限实现的核心设计思想
一步步教你如何用疯狂.NET架构中的通用权限系统 -- 如何控制用户显示的菜单权限
一步步教你如何用疯狂.NET架构中的通用权限系统 -- 在页面中的调用权限讲解
一步步教你如何用疯狂.NET架构中的通用权限系统 -- 数据集权限的调用权限讲解
标准权限模型RBAC与实际日常开发工作结合后,我对RBAC模型的改进优化研究成果分享
淘宝店地址:
http://shop59297253.taobao.com/
将权限管理、工作流管理做到我能力的极致,一个人只能做好那么很少的几件事情。