博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
不使用三方包时,如何在社交系统ThinkSNS中建立优雅的用户权限管理【研发日记13】...
阅读量:5895 次
发布时间:2019-06-19

本文共 839 字,大约阅读时间需要 2 分钟。

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

需求场景

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

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

数据表设计

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

h7SGVm84q9.png

可以看到关系如下 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: (开源不易,求 Star )

ThinkSNS官网:

转载地址:http://bxisx.baihongyu.com/

你可能感兴趣的文章
第2章 Python基础-字符编码&数据类型 综合 练习题
查看>>
Adobe Acrobat 9 Pro序列号
查看>>
怎样高速地安装Ubuntu SDK
查看>>
mybatis与分布式事务的面试
查看>>
如何在一张ppt中插入多张图片并能依次播放
查看>>
cocos creator热更新教程
查看>>
cookie的安全性问题
查看>>
ArcGIS 10.4的0x80040228许可错误
查看>>
SpringBoot Docker Mysql安装,Docker安装Mysql
查看>>
MT2018笔试题之计算数字位数
查看>>
第四百一十三节,python面向对象,组合、类创建的本质、依赖注入
查看>>
df -h和du -sh显示结果不一样的原因及解决
查看>>
amaze ui响应式辅助
查看>>
【ASP.NET Core】给中间件传参数的方法
查看>>
zabbix 基于JMX的Tomcat监控
查看>>
Android项目实战(十一):moveTaskToBack(boolean ) 方法的使用
查看>>
Class类和ClassLoader类的简单介绍
查看>>
Oracle 远程访问配置 在 Windows Forms 和 WPF 应用中使用 FontAwesome 图标 C#反序列化XML异常:在 XML文档(0, 0)中有一个错误“缺少根元素...
查看>>
Java多线程和并发基础
查看>>
分布式数据库管理系统
查看>>