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

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

需求场景git

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

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

数据表设计缓存

其实这一块我我的是参考的 Zizaco/entrust 由于我以为,大多数状况下,咱们要用的角色和权限节点都是真多用户的。数据表设计以下:框架

h7SGVm84q9.png

能够看到关系以下 user -> role -> ability ,其中关系所有都是多对多关系。一个用户能够拥有多个 role,一个 ability 能够被分配给多个 role 。spa

链式方法设计
图片描述
其中调用 $user->ability()->all() 和 $user->ability()->all() 都是返回的 集合 能够链式调用集合下的全部方法进一步操做。设计

ability 用户 Trait
图片描述
图片描述code

Ability 实例
图片描述
图片描述
图片描述图片

Role 模型所需代码
图片描述
图片描述

使用

而后咱们打开 User 模型wen jia文件添加以下代码:

class User ...
{

use UserHasAbility;

}

总结

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

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

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

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

GitHub: https://github.com/slimkit/th...(开源不易,求 Star )
ThinkSNS官网:http://www.thinksns.com/

相关文章
相关标签/搜索