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 授权的内容,请查看 文档。如果你喜欢这篇文章,点个赞,它是免费的 ?

本文中的所有译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接
我们的翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。

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

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

本帖已被设为精华帖!
本文为协同翻译文章,如您发现瑕疵请点击「改进」按钮提交优化建议
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
讨论数量: 4

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

5年前 评论
张浩浩浩浩

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

4年前 评论

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

4年前 评论
张浩浩浩浩

@erigo 谢谢解答 :grin:

4年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!