zoukankan      html  css  js  c++  java
  • 基于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/

  • 相关阅读:
    Tips for C++ Primer Chapter 11 关联容器
    Tips for C++ Primer Chapter 10 泛型算法
    Tips for C++ Primer Chapter 9 顺序容器
    Tips for C++ Primer Chapter 8 IO库
    Trie Tree 字典树
    Manacher Algorithm 最长回文子串
    【Android Studio】android Internal HTTP server disabled 解决
    释放修改OS X 10.11系统文件权限【转】
    win10 Vmware12装mac os X10.11虚拟机教程
    【Android开发实践】android.view.InflateException: Binary XML file line #12: Error inflating class fragment问题解决
  • 原文地址:https://www.cnblogs.com/asxinyu/p/2564316.html
Copyright © 2011-2022 走看看