基于Newlife.XCode的权限系统(含数据集权限)【设计篇】

      本博客所有文章分类的总目录:http://www.cnblogs.com/asxinyu/p/4288836.html

Newlife XCode组件相关文章目录:http://www.cnblogs.com/asxinyu/p/4329747.html

  权限管理在一个系统的开发中必不可少的部分,说重要也很重要,说不重要当然也没多少人重视。说有技术含量,但也还真有点技术含量,比如博客园吉日大哥的权限系统,我也用过,不得不佩服。当然很多人也认为没什么技术含量,自己的系统中也都有这么个东西,也都能满足实际需求。
       我不是专门搞开发的,所以有些东西可能偏离时间的轨道。请谅解。一直对权限系统比较感兴趣,也一直想打造一个属于自己的权限管理组件,能随心所欲的进行权限控制。我的目标是“除了普通的访问控制权限之外,还要对每个表每条记录的每个字段进行授权控制,另外要足够小和简单”不说废话了,先看数据库表结构设计,然后讲解思路:

1.权限管理的几个核心表是:用户表,角色表,权限表,用户角色表,用户权限表,角色权限表;
2.下面是数据库设计的初步版本,可能在必填和默认值上面还有些小错误,不过没关系,主要先看思路;

User: 用户表

中文名

英文名

字段名

数据类型

大小

主键

唯一

必填

默认值

编号

Id

Id

Int32

10

 

用户名

UserName

UserName

String

30

 

 

 

密码

Password

Password

String

50

 

 

 

排序码

SortCode

SortCode

Int32

10

 

 

 

 

是否有效

IsEnable

IsEnable

SByte

3

 

 

 

1

 

Role: 角色表 

中文名

英文名

字段名

数据类型

大小

主键

唯一

必填

默认值

编号

Id

Id

Int32

10

 

角色名称

RoleName

RoleName

String

20

 

 

 

角色分类

Category

Category

String

30

 

 

 

 

排序码

SortCode

SortCode

Int32

10

 

 

 

9999

是否有效

IsEnable

IsEnable

SByte

3

 

 

1

备注

Description

Description

String

50

 

 

 

 
 

Permission: 权限表 

中文名

英文名

字段名

数据类型

大小

主键

唯一

必填

默认值

编号

Id

Id

Int32

10

 

父编号

ParentId

ParentId

Int32

10

 

 

 

数据库表名称

DbTable

DbTable

String

50

 

 

 

 

权限名称

Name

Name

String

30

 

 

 

是否开启数据权限

IsDataPermission

IsDataPermission

SByte

3

 

 

 

0

数据条件

Constraint

Constraint

String

100

 

 

 

 

排序码

SortCode

SortCode

Int32

10

 

 

 

9999

是否有效

IsEnable

IsEnable

SByte

3

 

 

1

备注

Description

Description

String

50

 

 

 

 
 
UserRole: 用户角色表 

中文名

英文名

字段名

数据类型

大小

主键

唯一

必填

默认值

编号

Id

Id

Int32

10

 

用户编号

UserId

UserId

Int32

10

 

 

 

角色编号

RoleId

RoleId

Int32

10

 

 

 
 UserPermission: 用户权限表 

中文名

英文名

字段名

数据类型

大小

主键

唯一

必填

默认值

编号

Id

Id

Int32

10

 

权限编号

PermissionId

PermissionId

Int32

10

 

 

 

用户编号

UserId

UserId

Int32

10

 

 

 
 

RolePermission: 角色权限表 (RolePermission) 

中文名

英文名

字段名

数据类型

大小

主键

唯一

必填

默认值

编号

Id

Id

Int32

10

 

角色编号

RoleId

RoleId

Int32

10

 

 

 

权限编号

PermissionId

PermissionId

Int32

10

 

 

 
 
基本说明
1.用户表,角色表,用户角色表很简单,就不用介绍了,它们是多对多的关系。

2 用户权限和角色权限就是权限的分配了,如果用户及其角色具有某一个权限,则具有相应的访问权限。
3.权限表,这个是核心,我觉得我的简洁之处也就是在这里。着重介绍:  
  • 权限表是树形的,权限的根节点是以数据库名称来划分,权限是以数据库的数据表为单位的。
  • 所以,权限表有一个字段名为DbTable,这个字段是的含义是“数据库名称+数据表名称”,作用是这样的:
  • 绝大部分权限都是和数据库中某个表相关的,所以这里数据表是主要的权限单位
  • 每个数据库的数据表系统默认6种数据权限:添加、删除、修改、查询、菜单、全局数据权限
  • 也就是说每个数据表都有6个默认的子权限节点,该类型的权限节点是可以自定义的,比如新增一个
  • 数据权限只能在数据表下的5种权限中添加,比如要给 删除添加 数据权限,则在当前表的 删除权限下添加子节点,同时打开父节点的数据权限开关。
  • 当然你也可以自定义一个根节点,来自定义你的相关权限。

比如上面这张简单的示意图,是每个表都有的权限结构,数据权限只能在 增加,删除,修改,查询和全局数据权限5个地方定义,并且这5个权限,若要添加子节点,只能是数据权限。

1.全局数据权限是为了方便数据权限的定义而设置的,比如增删查改,如果都要对某一个字段进行限制,那么只需要在全局里面定义就可以了,没必要到每个增删查改权限中去添加。

2. 关于自定义权限,自定义权限也可以放在任何地方,只要方便你自己就行。比如可以将自定义权限放在表下面,如果有一个表 按钮,或者 菜单,你想添加权限控制,但又和增删查改不完全相干,那你可以在这里自定义一个权限。 

3.若定义数据权限,则将约束条件放在Constraint中,然后将数据权限授予角色或者用户。

 4.其实用户权限表某种时候是不必要的,用户是属于角色的,只要定义角色权限即可,但为了某些临时需求,临时赋予某些用户一些权限,所以增加了用户权限表。

      本权限系统基于Newlife.Xcode,数据权限的实现,就是在对实体进行增删查改时进行条件过滤,目前已经完成40%的开发工作。最近搬家,7月份还要去上海培训,所以最近一段时间是没时间做了,今天在群里面看见有人讨论数据权限,所以就趁机把自己的思路写下来。可能比较混乱,希望大家在论坛或者群里面讨论。本文对于的论坛地址为:

基于Newlife.Xcode的权限系统 欢迎讨论
http://bbs.53wb.com/forum.php?mod=viewthread&tid=196&fromuid=28

Newlife.Xcode的资源:

1.QQ群:1600800

2.博客:http://www.cnblogs.com/nnhy/ 

             http://www.cnblogs.com/asxinyu/

3.论坛:http://www.53wb.com/

4.开源:http://xcode.codeplex.com/

posted @ 2012-06-26 20:24  数据之巅  阅读(3149)  评论(14编辑  收藏