三种权限设计方案「建议收藏」

三种权限设计方案「建议收藏」三种权限设计方案的归纳和比较权限设计是很多系统重要的组成部分,主要用于控制功能和流程,本文将几种常见的权限设计方案(权限系统的名都是自己起的)的基本设计写出来,其中不恰当处还请大家指出,我们来讨论一下.1.等级权限系统    这种权限系统在论坛中很常见,在这种系统中,权限级别如同官阶从低到高排列,每个用户拥有一个权限,其中设定了这个用户的权限等级,在用户需要执行操作前先查看

大家好,又见面了,我是你们的朋友全栈君。

三种权限设计方案的归纳和比较

权限设计是很多系统重要的组成部分,主要用于控制功能和流程,本文将几种常见的权限设计方案(权限系统的名都是自己起的)的基本设计写出来,其中不恰当处还请大家指出,我们来讨论一下.

1.等级权限系统

    这种权限系统在论坛中很常见,在这种系统中,权限级别如同官阶从低到高排列,每个用户拥有一个权限,其中设定了这个用户的权限等级,在用户需要执行操作前先查看其权限等级是否大于执行操作所需要的权限等级,是则进行操作。

在等级权限系统中领域对象用户类User的基本属性如下:
    id       // 用户ID
    name     // 用户名

领域对象权限类Privilege的基本属性如下:
    id       // 权限ID
    userid   // 持有此权限的用户id
    level    // 用户的权限等级

level的设置示例
level 对应可执行的功能
0 访问
1 可跟帖
2 可创建主贴
3 可删除主贴
4 可创建频道
5 可删除频道
6 可查看用户
7 可分配用户权限
8 可修改用户密码
9 可删除用户

使用中,执行一个操作比如创建主贴时,先从Session中取出用户,然后按其id查出其对应的权限等级,拿它和执行创建主贴所需要的等级(3)进行比较,高于则可进行创建主贴操作,否则报告权限不够.

等级权限系统简单易用,在如论坛等刚性控制系统中使用很好,但不适用于需要限制权限的范围的场合。

2.范围限制权限系统

    等级权限系统系统的缺点是控制范围过广,比如一个论坛中有很多子论坛,一个子论坛的分版主同时也能对另一个同等级分论坛的帖子进行控制,这在一定程度不合理,有越界的嫌疑,更好的做法是将版主权限控制在一版之内,这时我们可以采用范围限制权限系统. 这种权限系统在项目管理系统中很常见.

在等级权限系统中领域对象用户类User的基本属性如下:
    id       // 用户ID
    name     // 用户名

领域对象项目类Project的基本属性如下:
    id       // 项目ID
    name     // 项目名

领域对象权限类Privilege的基本属性如下:
    id       // 权限ID
    userid   // 持有此权限的用户id
    projectid // 此权限对应的项目
    level     // 用户的权限等级

其中,通过引入了新属性projectid,我们对权限的范围进行了有效限制,项目不同则权限等级再高也是无效,这样就起到了限制权限能力范围的作用.

3.范围限制单项权限系统

在上面两个权限系统中,权限高的自然能执行权限要求低的操作,这样做权力没有细分,在有些场合并不合理,比如即使是董事长不可直接操作人事部的招聘任务,他只对雇员去留有建议权.对于这样的场合我们需要使用范围限制单项权限系统.它的典型应用如工作流和OA系统。

在范围限制单项权限系统中领域对象用户类User的基本属性如下:
    id        // 用户ID
    name      // 用户名

领域对象项目类Project的基本属性如下:
    id        // 项目ID
    name      // 项目名

领域对象权限类Privilege的基本属性如下:
    id         // 权限ID
    userid     // 持有此权限的用户id
    projectid  // 此权限对应的项目
    abilityid  // 权限控制能力id

领域对象权限控制能力类ability的基本属性如下:
    id         // 控制能力ID
    item       // 控制能力子项

item的设置示例
item 对应可执行的功能
0 读
1 写
2 查
3 删

通过对权限能力的细分,用户权限的控制粒度更细了,对功能和流程就能有更精确的把握,适用于复杂的场合.

以上三种权限系统没有优劣之分只有适用场合的区别,前面的粗略但易于操作,后面的精确但失之烦琐,在现实使用中我们应该根据场合选择合适的权限系统.

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/160422.html原文链接:https://javaforall.net

(0)
上一篇 2022年7月16日 上午8:16
下一篇 2022年7月16日 上午8:36


相关推荐

  • RHCE认证考试教材

    RHCE认证考试教材前段时间考 RHCE7 顺便给大家分享下 RHCE6 7 的中文教材 毕竟此书是官方的培训教材 还是值得看看 RHEL6 7 承前启后的 给个赞 下载 http pan baidu com s 1nu9mCnn 转载于 https www cnblogs com xiaochina p 5709043 html

    2026年3月26日
    2
  • phpstorm PhpStorm 2021.3.20 激活码 3月最新注册码

    phpstorm PhpStorm 2021.3.20 激活码 3月最新注册码,https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月15日
    37
  • IDEA 全局搜索快捷键CTRL+SHIFT+F,不起作用

    IDEA 全局搜索快捷键CTRL+SHIFT+F,不起作用1 全局搜索快捷键 CTRL SHIFT F2 全部替换快捷键 CTRL SHIFT R3 IDEA 全局搜索快捷键 CTRL SHIFT F 不起作用 nbsp nbsp nbsp nbsp 一般是其他软件占用的这个快捷键 首先可以去看下搜狗输入法的繁简字体切换快捷键 取消占用即可

    2026年3月26日
    2
  • 为何我记不准Numeric 类型是什么

    为何我记不准Numeric 类型是什么SQLServernum 数据类型 nbsp Numeric 10 2 指字段是数字型 长度为 10 小数为两位的这是我在网上看到的解释 之前也听同时们说过 确没有记住 于是只好上网 search 自己试验了 不想问同事 如果他们说的清楚且明确易懂的话 我早记住了 何况问题如此之小 确如此严重 构造测试数据 边界值限定一下就好了 NG

    2026年3月17日
    2
  • SNMP Trap调试记录[通俗易懂]

    SNMP Trap调试记录[通俗易懂]目录一、Trap与Inform二、Trap1、Agent端工作流程2、Manager端工作流程3、流程图三、调试四、SNMP中预定义的trap一、Trap与InformSNMPInformRequests功能允许路由器向SNMP管理器发送通知请求。路由器可以在发生特定事件时向SNMP管理器发送通知。例如,代理路由器可能在自身遇到错误情况时向管理器发…

    2022年8月20日
    8
  • c# splitContainer控件

    c# splitContainer控件splitContainer可以把窗口拆分为两部分可以使用多个splitContainer常用属性(1).splitContainer不能被鼠标直接点击选中,可通过右击->选择splitContainer选中。(2).属性IsSplitterFixed用于设置拆分器能否移动。(3).属性FixedPanel若设置为Panel1(或Panel2),在调整窗

    2022年7月18日
    29

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号