Laravel 访问控制列表(ACL) 的最简实现方式
谈到 ACL(Access Control List),我们时长觉得它是如此的复杂, 需要建立角色表(roles)以及用户角色关联表(user_role),以及他们之间的多对多关系等等。那么,让我告诉你实现这一切的最简单方法,它甚至无需额外创建数据表和模型间关系。
如果你不知道什么是 ACL!它只是不同用户的权限层级控制。想象一下内容管理系统,当你拥有 admin 权限时,你可以做任何事情,拥有 author 权限时,你可以新建文章,而拥有 editor 权限时,你可以修改文章。ACL 让你可以限制用户的权限。就是那么简单。
接下来,让我们开始编码吧。
第一步
在 users 表中添加一个新的字段。(user_type)
用户的类型字段
当然,现在对 user 表进行迁移:) ?
在 user_type 这个字段中,存储用户的类型,它的值分别为('admin', 'author','editor','whatever')
第二步
给用户创建一个策略类。打开项目下的 'app/Providers/AuthServiceProvider.php' 文件
注册用户的类型策略到项目中
不要忘了在 'app/Providers/AuthServiceProvider.php' 文件的顶部导入
GateContract。 ?
如上图,在文件顶部导入 GateContract
第三步
你已经完成了 ACL !!!!!! ?
现在,是时候去使用它们了 ?
在视图中的用法
在视图中,你可以使用 @can
以及 @cannot
等一系列的指令.
在视图中,针对不同的用户类型,你可以使用上面这些指令来展示或者隐藏某些视图。
只有 Admin 角色可以查看到上面这些菜单
只有 Editors 角色可以查看到上面这些菜单
只有 Authors 角色可以查看到上面这些菜单
希望你已经看懂了。你可以调整项目的访问权限,只需要稍微改变一点点代码。
在控制器中的用法
后台是应用程序中很重要的一部分。让我们看下怎么去限制用户访问控制器中的方法和逻辑。
admin 权限的用户访问控制器的权限控制
上面展示的就是 ?
总结 ??
我希望这篇文章对你有用。说真的,ACL 永远不会比这更简单。:)。想了解更多关于 Laravel 授权的内容,请查看 文档。如果你喜欢这篇文章,点个赞,它是免费的 ?
本文中的所有译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接
我们的翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。
自己对着这个文档去写了下代码,只是用户我换成了自己定义的 admins 表,所以要改下app/config中的 auth.php 的配置,把默认的 auth 改成 admins

想问一下 Result API 应该怎么做限制,传给前端.
@张浩浩浩浩 你只需要在登录的时候把 role 告诉前端,剩下都是前端的事了。剩下的在后端对应的接口,就像上面说的,在接口里做好角色限制就 ok 了。
@erigo 谢谢解答 :grin: