• 权限管理 (二) 实现中几个问题


            很多人在做每件事情的时候都会遇到各种问题和困难,当遇到困难时需要去主动解决否则会越积累越多也越不好解决,时间长了慢慢的让这种思维成为我们的习惯,它会让你受益一生。

            写每篇博客都会有所收获和思想感触,不成熟的、成熟的、自己的或是借鉴别人的都可以拿过来写写,写博客和写散文类似若能达到形散神不散的地步,水平也就到一定境界了。


            做权限这块时整体上知道了设计思路该如何实现,但是还是对于一些细节的控制不是特别理解,看了若干遍并查了查资料问了问别人讨论了一下清晰了很多,对于模糊的东西请教别人或者一起讨论对加深理解很有帮助,即使大家都不懂也可以交流一下各自的理解,也许你会从别人的思路中受到启发在与别人思想的碰撞中产生璀璨的火花。

           下面说一下存在的几个问题:

       

           多个角色授予一个用户的冲突问题

           为模块授权,通过创建角色,并为该角色分配权限,然后便可以为用户分配角色了(可以为多个),从而达到复用和统一控制的目的。一个用户可以拥有多个角色,在给客户提供灵活方便的同时,问题来了——多个角色被授予同一个用户时出现授权冲突,比如:角色A对模块A有删除权限,但角色B对模块A的删除权限则被禁止,这时候,如果将角色A和角色B同时授予用户A,则会造成困扰,它应该是以角色A的授权为准,还是应该以角色B的授权为准?

           办法总比问题多,那么我们应该考虑解决方案,并从中选择最优解。针对这个问题,可以考虑如下解决办法:

           1.如果多个角色之间有授权冲突,则不允许将这些角色同时授予同一个用户,比如,在上述例子中,不允许将角色A和角色B同时授予用户A

           2.允许将有授权冲突的角色同时授予同一个用户,但用户在某个时刻只能扮演其中的某个角色。在用户登陆后台管理界面之后,可以通过切换角色,来执行不同的操作!

           3.允许将有授权冲突的角色同时授予同一个用户,对用户的这些角色来说,有优先级的概念,当将角色分配给用户的时候,应该设置它的优先级。同一个角色在不同的用户那里可能具有不同的优先级。当授权有冲突的时候,以优先级更高的角色授权为准。

    前两种方法不够灵活,比较死板,过于强硬,而第三种方法比较人性化。


          对每个模块操作的控制

          需要控制每个模块的增删改查操作,如果需求变了也可能增加或者减少操作种类,常规想法是增加实体类属性或表字段来控制但是这种方式不灵活,因为数据库结构一旦定型是不会轻易修改,如果有用一个字段表示多个操作类型就可以解决这样的问题,我们用一个int类型表示,javaint类型占32bit这样可以用一个bit代表一种操作类型,bit的值01表示有效无效让操作种类和有效无效两个功能合二为一。


          角色或模块给同一个用户授权的冲突问题

          在给用户授权的时候主要是通过角色授予,也可以给用户单独授权,如果同一个或多个资源模块既给用户单独授权又通过角色授权就会产生冲突,如果解决该问题本OA中添加了一个字段“是否继承”,这里的继承第一遍看时不好理解,“继承”加了双引号显然不是父类子类一样的关系继承,这里的继承可以理解为是否使用对用户的单独授权,继承表示不使用单独授权而是查询用户所拥有角色的授权,使用从角色那里继承来得权限。

           这是一个简单的权限管理,有关更多权限实现见下篇博客……

  • 相关阅读:
    PHP 缓存技术
    redis雪崩
    【Redis】- 缓存击穿
    Memcache 与 Memcached 的区别
    数据库设计:范式与反范式
    Thinkphp5多数据库切换
    PHP 分布式集群中session共享问题以及session有效期的设置
    Nginx使用upstream实现动静分离
    rsync 服务快速部署手册
    tp5 为什么使用单例模式
  • 原文地址:https://www.cnblogs.com/lilongsheng1125/p/4978551.html
Copyright © 2020-2023  润新知