V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Zhiyicx
V2EX  ›  程序员

不使用三方包时,如何在社交系统 ThinkSNS 中建立优雅的用户权限管理 [研发日记 13]

  •  
  •   Zhiyicx · 2017-09-04 15:09:35 +08:00 · 1949 次点击
    这是一个创建于 2638 天前的主题,其中的信息可能已经有所发展或是发生改变。

    本文主要全面讲解在不适用第三方包的情况下,如何在基于 Laravel 框架上,研发社交系统 ThinkSNS+时,简历一套优雅而不失性价比的用户权限管理体系功能, [内含 ThinkSNS 真实代码] 。

    什么是 ThinkSNS ?

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

    社交系统 ThinkSNS 团队拥有超过九年的移动互联网软件 /网站 /APP 开发经验,涉及行业:粉丝社群、直播互动、移动医疗、电子商务、生活服务、在线教育、旅游出行、移动办公、电子杂志、休闲娱乐、企业信息等。

    我们的服务包括

    快速建站、提供技术及产品解决方案、技术支持维护、技术孵化服务,同时,我们也提供 TS 的二次开发服务以及网站开发、Android APP 开发、iOS APP 开发、H5 开发、微信公众号开发、小程序开发等定制开发服务,更多 TS 问题请咨询 QQ:3298713109。

    需求场景

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

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

    数据表设计

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

    Alt text

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

    链式方法设计

    Alt text

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

    ability 用户 Trait

    Alt text

    Alt text

    Ability 实例

    Alt text

    Alt text

    Alt text

    Role 模型所需代码

    Alt text

    Alt text

    使用

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

    class User ...

    {

    use UserHasAbility;
    

    }

    总结

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

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

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

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

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

    ThinkSNS 官网:http://www.thinksns.com/

    目前尚无回复
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   938 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 21ms · UTC 22:10 · PVG 06:10 · LAX 14:10 · JFK 17:10
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.