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

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://laravel-china.org/topics/12902/t...

本帖已被设为精华帖!
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
讨论数量: 4

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

4个月前
张浩浩浩浩

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

4个月前

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

3个月前
张浩浩浩浩

@erigo 谢谢解答 :grin:

3个月前

  • 请注意单词拼写,以及中英文排版,参考此页
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`, 更多语法请见这里 Markdown 语法
  • 支持表情,使用方法请见 Emoji 自动补全来咯,可用的 Emoji 请见 :metal: :point_right: Emoji 列表 :star: :sparkles:
  • 上传图片, 支持拖拽和剪切板黏贴上传, 格式限制 - jpg, png, gif
  • 发布框支持本地存储功能,会在内容变更时保存,「提交」按钮点击时清空
  请勿发布不友善或者负能量的内容。与人为善,比聪明更重要!