权限设计的探讨

减小字体 增大字体 作者:佚名  来源:本站整理  发布时间:2009-03-16 22:59:52

  /// <summary>
 /// 系统固定用户或角色枚举类型。
 /// </summary>
 /// <remarks>
 /// 管理员角色:16399 = 100000000001111
 /// 所有者角色:16385 = 100000000000001
 /// 只读者角色:16386 = 100000000000010
 /// 安全员角色:16388 = 100000000000100
 /// 配置员角色:16392 = 100000000001000
 /// </remarks>
 public enum FixedRoleEnum
 {
  ///<summary>系统管理员固定用户</summary>
  Administrator = 1,
  ///<summary>系统管理员固定角色</summary>
  Administrators = 16399,
  ///<summary>所有者固定角色(具有读写操作之权限)</summary>
  Authors  = 16385,
  ///<summary>只读者固定角色(具有只读操作之权限)</summary>
  Readers  = 16386,
  ///<summary>系统安全管理员固定角色</summary>
  Security = 16388,
  ///<summary>系统设置管理员固定角色</summary>
  Setting  = 16392
 }
 /// <summary>
 /// 系统权限枚举类型。
 /// </summary>
 public enum PermissionEnum
 {
  /// <summary>“读取”权限</summary>
  FetchPermission = 1,
  /// <summary>“新增”权限</summary>
  AddNewPermission = 2,
  /// <summary>“更新”权限</summary>
  UpdatePermission = 4,
  /// <summary>“删除”权限</summary>
  DeletePermission = 8,
  /// <summary>“打印”权限</summary>
  PrintPermission = 16,
  /// <summary>系统保留,应用于流程处理</summary>
  FlowPermission = 1024,
  /// <summary>系统保留,应用于流程处理</summary>
  VoidPermission = 2048
 }
如果用户“Popeye”对“销售出仓单[2009]”系统对象具有读写(读取+修改+删除+新增)权限:(权限表定义如下TPermission)
FormID       UID           Permission
=======      ====          ==========
2009         Popeye        1+2+4+8=15
***** 上面系统定义的默认权限肯定是不够系统使用的,那么还有一些权限(例如:报关系统中的“计算差异表”“制造申报单”等权限,就由系统再定义),其实不用太担心会不够用的,因为在一个Form中不可能会出现所有权限情况,所以,系统自定义的权限掩码可重复使用在不同的表单中。*****
建议不要把角色和用户分开两张表来存储(可参考MS-SQL Server中的sys_users表),因为在后面的权限定义表需要引用这个表的UID(其可为用户或角色,SQL中是使用UID的数值范围来区别用户与角色的,建议也如此。),版主说的角色与用户分开对待权限设置,这点我不赞成。因为角色只不过是一种用户组,其应该享用用户的权限定义范围,在其下属的角色成员(注意角色成员不同于用户或角色哦,其可以为角色也可以为用户)均默认继承其定义的权限,除非角色成员重新指派其上级角色定义的权限字。下面给出我的相关表定义:
TUser(用户或角色表)
===================
(PK)UID   int              NOT NULL(主键)
Name      nvarchar(50)     NOT NULL(唯一性约束)
FullName  nvarchar(100)    NULL
Description   nvarchar(255)  NULL
MasterNo  varchar(25)     NULL(注:该字段对应为员工表中的员工编号,通过该字段就可以关联知道该用户或角色所属的员工了,在企业管理系统中很有用啊!)
TMember(用户与角色关系表)
=========================
(*PK)RoleID    int   NOT NULL
(*PK)UserID    int   NOT NULL
TPermission(用户权限表)
=======================
(*PK)FormID    int   NOT NULL(表示系统中各个模块或表单的唯一编号)
(*PK)UserID    int   NOT NULL(用户或角色编号)
Protect        bit   NOT NULL(1:表示显示授予权限;0:表示显示拒绝权限)
Permission     int   NOT NULL(权限掩码和)
***** 如果哪位兄弟有意研究权限与流程定制方面的东东,相信找偶是没错的了!!!呵呵~~~    老板,给分啊~~~~~×××××


==========================================
以上的方法与我做的项目的方法基本一致,现摘一部分的表结构,以供大家参考
create table t_workelement /*工作元素表*/
(
 code varchar(20) not null, /*元素的代码,唯一*/
 name varchar(50)  not null UNIQUE,/*元素的名称,唯一*/
 type int  not null, /*类型 0-单据操作 1-报表操作 2-功能操作*/
 bcode varchar(20) null,  /*对应操作的单据\报表\功能的代码*/
 style int  null,  /*单据:类型 0-查看 1-新增 2-修改 3-删除*/
      /*报表:无*/
      /*功能:无*/
 term ntext  null,  /*单据:查看\修改\删除时要符合的条件,如"{$承揽合同.编号}=12\n{$承揽合同.名称}<>’afd’"*/
 primary key(code)
)
go
drop table t_role
go
create table t_role /*角色表*/
(
 name varchar(30) not null,
 category varchar(50) null,
 remark varchar(100) null,
 primary key(name)
)
go
drop table t_roleelement
go
create table t_roleelement /*角色元素操作表*/
(
 rname varchar(30) not null, /*角色名称*/
 ecode varchar(20) not null, /*元素的代码*/
 primary key(rname,ecode)
)
go
drop table t_users
go
create table t_users /*用户表*/
(
 name varchar(20) not null, /*用户的名称*/
 dcode varchar(20) not null, /*所属的部门*/
 category varchar(50) null,  /*用户的类别*/
 pswd varchar(15) null,  /*密码*/
 primary key(name)
)
go
/*插入系统管理员*/
INSERT INTO t_users
(
 name,
 dcode,
 category,
 pswd
)
VALUES
(
 ’Admini’,
 ’system’,
 ’超级用户’,
 ’’
)
go
drop table t_userrole
go
create table t_userrole /*用户角色表*/
(
 uname varchar(20) not null, /*用户名称*/
 rname varchar(30) not null, /*角色的名称*/
 primary key(uname,rname)
)
go
INSERT INTO t_userrole
(
 uname,
 rname
)
VALUES
(
 ’Admini’,
 ’系统管理员’
)
go
drop table t_dept
go
create table t_dept /*部门表*/
(
 code varchar(20) not null, /*部门的代码*/
 name varchar(50) not null UNIQUE,/*部门的名称*/
 type varchar(10) null,  /*部门的类别 行政 仓库 车间*/
 subtype varchar(16) null,  /*子类别 成品仓库 原料仓库自定义*/
 primary key(code)
)
go
/*插入系统管理部*/
INSERT INTO t_dept
(
 code,
 name,
 type
)
VALUES
(
 ’system’,
 ’系统管理部’,
 ’行政’
)
go

 

上一页  [1] [2] 

Tags:

作者:佚名
分享到: 微信 更多

相关文章

  • 权限设计的探讨