zoukankan      html  css  js  c++  java
  • 不使用三方包时,如何在ThinkSNS中建立优雅的用户权限管理

    什么是ThinkSNS ?

    ThinkSNS(简称TS),一款全平台综合性社交系统,为国内外大中小企业和创业者提供社会化软件研发及技术解决方案,目前最新版本为ThinkSNS+(简称TS+)、ThinkSNS V4、ThinkSNS【简】。

    需求场景

    就是用户组+权限节点,这个需求 laravel 有很多很好的第三方包实现。下面描述代码不参与缓存机制纯数据库查询,给大家提供一个思路。

    下面的代码都是来自于ThinkSNS+,是基于 Laravel 全新开发的 ThinkSNS 社交开源项目,遵循 Apache-2.0 开源协议。欢迎 Star 哦。

    数据表设计

    其实这一块我个人是参考的 Zizaco/entrust 因为我觉得,大多数情况下,我们要用的角色和权限节点都是真多用户的。数据表设计如下:

    h7SGVm84q9.png

    可以看到关系如下 user -> role -> ability ,其中关系全部都是多对多关系。一个用户可以拥有多个 role,一个 ability 可以被分配给多个 role 。

    链式方法设计

    程序图片1.png

    其中调用 $user->ability()->all() 和 $user->ability()->all() 都是返回的 集合 可以链式调用集合下的所有方法进一步操作。

    ability 用户 Trait


    程序图片2-1.png

    程序图片2-2.png

    Ability 实例

    程序图片3-1.png程序图片3-2.png程序图片3-3.png



    Role 模型所需代码

    程序图片4-1.png
    程序图片4-2.png

    使用

    然后我们打开 User 模型wen jia文件添加如下代码:

    class User ... {    use UserHasAbility; }

    总结

    其实性状在 User 模型中只暴露了 roles 和 ability 两个公开方法。但是已经足以胜任用户组权限判断逻辑了。

    整个 ability 都是结合在集合之上的一些封装,这样是的代码调用更加优雅。

    以上代码是在开发ThinkSNS+中的实际真实代码。具体的实现可参考项目。

    以上代码都来自于ThinkSNS Plus,看完整的开发代码可以看仓库:

    GitHub: https://github.com/slimkit/thinksns-plus(开源不易,求 Star )

  • 相关阅读:
    【转】编写高质量代码改善C#程序的157个建议——建议27:在查询中使用Lambda表达式
    python的reduce()函数
    SpringBoot中的配置文件
    23种设计模式概况性应用场景
    设计模式---合成模式
    tmpfs(转)
    Nginx配置文件(nginx.conf)配置详解
    Java设计模式------策略模式
    ubuntu下操作端口的方法
    ubuntu下安装ssh服务器方法
  • 原文地址:https://www.cnblogs.com/thinkSNS/p/11083389.html
Copyright © 2011-2022 走看看