疯狂.NET 通用权限设计 C\S后台管理,B\S前台调用

作者:互联网   出处:控件中国网   2014-11-05 19:18:42   阅读:1

我的目标就是,权限想定义什么权限就定义什么权限,想搞几个权限就搞几个权限,只要一行代码就可以在程序里准确判断,用最少的参数,用最最简单的方法,通用程序判断程序运行得铜墙铁壁一样稳定,这就是我的追求。

废话少说我主要讲解的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() 函数进行以下优化,搞个循环遍历啥的,
能自动绑定权限状态,那就彻底全自动绑定操作权限了,不用每个人都自己写对应的权限
判断了,我不喜欢那么万能的东西,还是喜欢想怎么控制就怎么控制。
 

Copyright© 2006-2015 ComponentCN.com all rights reserved.重庆磐岩科技有限公司(控件中国网) 版权所有 渝ICP备12000264号 法律顾问:元炳律师事务所
客服软件
live chat