文档章节

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

ThinkSNS官方帐号
 ThinkSNS官方帐号
发布于 03/06 14:24
字数 657
阅读 7
收藏 0

什么是ThinkSNS ?

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

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

需求场景

就是用户组+权限节点,这个需求 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 )

© 著作权归作者所有

ThinkSNS官方帐号
粉丝 5
博文 269
码字总数 341455
作品 0
东城
私信 提问
开源社交系统ThinkSNS新产品最新解密!

  ThinkSNS作为业内软件系统的领导者,很多授权客户和粉丝都在关心同样的问题。ThinkSNS新产品和V4.5版本有什么区别,又做了哪些升级?让我们来进一步了解这一次将会有哪些值得关注的地方。...

ThinkSNS账号
2017/03/29
44
0
ThinkSNSPlus 技术优势

ThinkSNS产品有哪些特色和优势? ThinkSNS在产品系统研发中始终坚持高性能,高标准,高适用“三高”原则。注重框架,模块,功能,体验4个部分的完整性,关联性,需求有效性。通过市场调研,企...

ThinkSNS账号
2018/10/16
5
0
开源社交系统ThinkSNS新产品最新解密!

ThinkSNS作为业内软件系统的领导者,很多授权客户和粉丝都在关心同样的问题。ThinkSNS新产品和V4.5版本有什么区别,又做了哪些升级?让我们来进一步了解这一次将会有哪些值得关注的地方。  ...

ThinkSNS官方帐号
2017/03/29
11
0
ThinkSNS功能更新预报----新增电商功能,实现社交+直播+电商一体化

随着社交网络、直播的兴起,电商营销的逻辑正在发生改变,不仅电商们正在玩直播,因社交网络兴起的网红们也纷纷玩起电商,社交网络经济变现正在成为电商新的突破口。 ThinkSNS凭借在社交系统...

ThinkSNS账号
2016/11/16
2
0
ThinkSNSPlus 从1.0到2.0

什么是 ThinkSNS+ 09 年,由北京的团队开发了 ThinkSNS 涉足社交开源行业。这么多年累计不少客户。2014-2016,两年都在维护和开发之前基于 TP 的 ThinkSNS , 慢慢的引入新开发概念。终于,在...

ThinkSNS账号
2018/10/12
26
0

没有更多内容

加载失败,请刷新页面

加载更多

安全组和云防火墙的区别

前言 熟悉云平台的朋友可能都会注意到这样一个事情:无论公有云还是私有云,创建虚拟机的时候都需要选择安全组,来对虚拟机进行安全防护;有的云平台在VPC里,还能选择防火墙,ZStack在3.6版...

ZStack社区版
24分钟前
2
0
教育性app开发的重要性和好处

在这个精通技术的世界中,流行的app主导着无聊的教育系统。当我们将技术和教育结合在一起时,它将带来当代以及强大的学习资源。因此,将教育移动app集成到您的学习过程中,并根据自己的信念把...

a429011717
25分钟前
3
0
IE6/7/8如何兼容CSS3属性

本文转载于:专业的前端网站➩IE6/7/8如何兼容CSS3属性 最近在工作中总是要求IE8兼容CSS3属性,在网上搜了搜主要是引入了一个htc文件(ie-css3.htc或者PIE.htc。个人认为这两个文件的作用差不...

前端老手
40分钟前
3
0
手把手教你ALLEGRO的约束规则的设置教程!

约束规则的设置 分三步, 定义规则(一、基本约束规则设置:1、线间距设置;2、线宽设置;3、设置过孔;4、区域约束规则设置;5、设置阻抗;6、设置走线的长度范围;7、设置等长:7.1、不过电阻的NET 等...

demyar
42分钟前
4
0
完美解决H5滚动滑动穿透方案:不使用系统滚动

网上有很多黑科技解决这个问题,都不是从根本去解决,例如通过js控制弹出时html加上position:fixed; 弹窗关闭后再去掉该样式,总觉得不太对,像是打补丁。 今天终于找到了滚动穿透的原因和完...

未来cc
47分钟前
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部