我的目标就是,權限想定義什麼權限就定義什麼權限,想搞幾個權限就搞幾個
權限,隻要一行代碼就可以在程式裡準确判斷,用最少的參數,用最最簡單的
方法,通用程式判斷程式運作得銅牆鐵壁一樣穩定,這就是我的追求。
廢話少說我主要講解的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() 函數進行以下優化,搞個循環周遊啥的,
能自動綁定權限狀态,那就徹底全自動綁定操作權限了,不用每個人都自己寫對應的權限
判斷了,我不喜歡那麼萬能的東西,還是喜歡想怎麼控制就怎麼控制。
導讀:
<a href="http://www.cnblogs.com/jirigala/archive/2009/02/07/1385659.html" target="_blank">通過命名空間的細微差别,很直白的講個人的那麼點兒小算盤、個人的小利益與公司的大利益</a>
<a href="http://www.cnblogs.com/jirigala/archive/2009/09/04/1560210.html" target="_blank">瘋狂.NET架構通用權限背景管理工具示範版2.0下載下傳</a>
<a href="http://www.cnblogs.com/jirigala/archive/2009/07/20/1527302.html" target="_blank">一步步教你如何用瘋狂.NET架構中的通用權限系統 -- 如何控制使用者顯示的菜單權限</a>
<a href="http://www.cnblogs.com/jirigala/archive/2009/07/20/1527241.html" target="_blank">一步步教你如何用瘋狂.NET架構中的通用權限系統 -- 在頁面中的調用權限講解</a>
<a href="http://www.cnblogs.com/jirigala/archive/2009/09/01/1558020.html" target="_blank">一步步教你如何用瘋狂.NET架構中的通用權限系統 -- 資料集權限的調用權限講解</a>
本文轉自 jirigala 51CTO部落格,原文連結:http://blog.51cto.com/2347979/448330,如需轉載請自行聯系原作者