专栏首页ThinkSNS【研发日记13】不使用三方包时,如何在ThinkSNS中建立优雅的用户权限管理
原创

【研发日记13】不使用三方包时,如何在ThinkSNS中建立优雅的用户权限管理

什么是ThinkSNS ?

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

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

需求场景

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

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

数据表设计

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

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

链式方法设计

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

ability 用户 Trait

Ability 实例

Role 模型所需代码

使用

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

class User ... {    use UserHasAbility; }

总结

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

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

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

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

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

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • ThinkSNS Plus 2.0 产品体验报告

    一款全平台综合性社交系统,为国内外大中小企业和创业者提供社会化软件研发及技术解决方案。

    ThinkSNS
  • SNS社交系统“ThinkSNS+”和“ThinkSNS V4”的区别

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

    ThinkSNS
  • ThinkSNS+软件系统研发日记 2月(上)

    实用开源软件安装部署是第一步, ThinkSNS+响应快速安装,易于二开基准,为大家录制了一份宝塔面板安装社交系统ThinkSNS+视频教程,去ThinkSNS...

    ThinkSNS
  • C语言的编译器和链接器

    C语言的编译分为两个阶段:编译和链接。首先编译器把源代码转换为中间代码,也称为目标代码(目标代码一般是该平台的的机器语言);目标代码并不完整,它不是可执行的。目...

    zy010101
  • 代码到底需不需要注释?

    好的代码需不需要注释,这个问题其实不能直接说需要或者不需要,因为要视情况而定。如果一段代码功能较为简单且独立,同时代码风格较好,是不需要注释的,因为代码本身已经...

    luoxn28
  • Hello Flutter,船长初体验

    前几天 Google 发布了 flutter.cn 以及 release 了 Flutter 1.9 ,今天船长没忍住,尝试了下 Flutter。

    程序亦非猿
  • java如何根据二进制流确定图片的类型

     为什么需要这样做? 因为仅仅通过后缀名我们并不能得知用户是否把图片的类型更改为其他类型. public enum ImageType { PNG('P','...

    用户1215919
  • MSP430的学习(3)

    MSP430单片机具有基本定时器(Basic Timer1),经常用于低功耗当中,他工作的目的就是支持软件和各种外围模块工作于低频率 低功耗条件下。通过对SMC...

    py3study
  • 开发人员如何提高效率和速度——实践检验真理

    工作效率是各行各业都非常重视的一个问题,对于一个高新技术企业来说,更是重中之重;代码开发是一项细致的工作,不仅要求开发人员有过硬的技术,更要有认真的态度,在本文...

    用户1289394
  • 我慢慢变成了公司程序员中的“老油条”,你呢?

    应用中被发现了一处bug,刚开始时我有一丝害怕,但庆幸的是,这部分代码不是我写的,于是我很高兴地告诉经理,“那不是我的代码,可能是同事A写的,你问问他吧”。

    用户5997198

扫码关注云+社区

领取腾讯云代金券