Laravel 访问控制列表(ACL) 的最简实现方式

file

谈到 ACL(Access Control List),我们时长觉得它是如此的复杂, 需要建立角色表(roles)以及用户角色关联表(user_role),以及他们之间的多对多关系等等。那么,让我告诉你实现这一切的最简单方法,它甚至无需额外创建数据表和模型间关系。

如果你不知道什么是 ACL!它只是不同用户的权限层级控制。想象一下内容管理系统,当你拥有 admin 权限时,你可以做任何事情,拥有 author 权限时,你可以新建文章,而拥有 editor 权限时,你可以修改文章。ACL 让你可以限制用户的权限。就是那么简单。

接下来,让我们开始编码吧。

第一步

在 users 表中添加一个新的字段。(user_type)

file

用户的类型字段

当然,现在对 user 表进行迁移:) ?

在 user_type 这个字段中,存储用户的类型,它的值分别为('admin', 'author','editor','whatever')

第二步

给用户创建一个策略类。打开项目下的 'app/Providers/AuthServiceProvider.php' 文件

file

注册用户的类型策略到项目中

不要忘了在 'app/Providers/AuthServiceProvider.php' 文件的顶部导入
GateContract。 ?

file

如上图,在文件顶部导入 GateContract

第三步

你已经完成了 ACL  !!!!!! ?

现在,是时候去使用它们了 ?

在视图中的用法

在视图中,你可以使用 @can 以及 @cannot 等一系列的指令.

在视图中,针对不同的用户类型,你可以使用上面这些指令来展示或者隐藏某些视图。

file

只有 Admin 角色可以查看到上面这些菜单

file

只有 Editors 角色可以查看到上面这些菜单

file

只有 Authors 角色可以查看到上面这些菜单

希望你已经看懂了。你可以调整项目的访问权限,只需要稍微改变一点点代码。

在控制器中的用法

后台是应用程序中很重要的一部分。让我们看下怎么去限制用户访问控制器中的方法和逻辑。

file

admin 权限的用户访问控制器的权限控制

上面展示的就是 ?

总结 ??

我希望这篇文章对你有用。说真的,ACL 永远不会比这更简单。:)。想了解更多关于 Laravel 授权的内容,请查看 文档。如果你喜欢这篇文章,点个赞,它是免费的 ?


Practice makes perfect.

原文地址:https://medium.com/@hujjatnazari/the-eas...

译文地址:https://learnku.com/laravel/t/12902/the-...

本帖已被设为精华帖!
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
讨论数量: 4

自己对着这个文档去写了下代码,只是用户我换成了自己定义的 admins 表,所以要改下app/config中的 auth.php 的配置,把默认的 auth 改成 admins
file

11个月前
张浩浩浩浩

想问一下 Result API 应该怎么做限制,传给前端.

11个月前

@张浩浩浩浩 你只需要在登录的时候把 role 告诉前端,剩下都是前端的事了。剩下的在后端对应的接口,就像上面说的,在接口里做好角色限制就 ok 了。

10个月前
张浩浩浩浩

@erigo 谢谢解答 :grin:

10个月前

请勿发布不友善或者负能量的内容。与人为善,比聪明更重要!

社区文档:

将托管在 packagist.org 和 github.com 的扩展包使用国内 CDN 加速
GitHub Laravel 扩展包 TOP 250
速查表方便快速查询框架功能,支持手机访问,支持中英文版本
Laravel 中文文档,由社区用户翻译和维护,将会保持一直更新
此文档的目的,就是为了提高技术团队的凝聚力、一致性和生产效率。
开发环境的部署,开发者工具的选择,适用于 Mac 和 Windows。
浓缩过后的精华
Laravel Nova 后台管理面板文档的中文翻译
Lumen 中文文档,由社区用户翻译和维护,将会保持一直更新
Laravel 下知名扩展包 Dingo API 的中文文档,Laravel API 开发必知必会