付费课程, 订阅后即可观看

如何把 resource 路由和 resource Gate 结合在一起进行权限判断

Laravel 路由有 resource 路由定义方式,对应于增删改查(CRUD)四种不同类型路由的定义,极大的简化了路由的定义;同样 Gate 权限定义的时候也有 resource Gate,对应于CRUD四种权限的定义。既然路由和权限都是针对CRUD的定义,那如何用最简单的方式把他们组织到一起呢,虽然官方文档当中没有介绍,但是其实是有一个特别简单的方式的,那就是在controller的构造函数中添加一行代码 $this->authorizeResource(XXX::class),传参的时候传递要接受权限授予的Model类即可

zhgm 2019.03.18 12:04

大神、做一期 laravel-echo-serve 的推送视频好吗。

国营 2019.03.18 12:52

过两周吧,最近的核心工作是把 API 开发的部分搞定,最近楼上一直装修,录视频基本成了奢望,希望楼上装修早日结束。

zhgm 2019.03.18 15:15

好的,等你哦!

shiwei yin 2019.11.05 14:08

新来的别忘了进入tinker之后输入namespace App 创建半天数据没创建出来。。。。蛋疼

下一秒钟见你 2020.04.23 04:32

laravel进tinker后为啥一定要指定命名空间

国营 2020.04.23 06:17

这样使用模型类的时候就不用再输入命名空间了

下一秒钟见你 2020.10.26 09:06

Exception with message 'domainWord failed with the selected locale. Try a different locale or activate the "intl" PHP extension.'这是为啥呀,我创建假数据,命名空间也弄了

国营 2020.10.26 12:06

解决了没,我一年没运动了,去打了半天篮球,报废中,intl你看看那个扩展包是有没有装好。

下一秒钟见你 2020.10.27 00:58

问题还是在的,composer包还是php.ini扩展?期待楼主的回复

国营 2020.10.27 01:19

其实你最早留言的时候,警告信息已经非常明确了,只是一句英文而已,哪怕英文不好,这个看懂也没什么难度,你必须要自己去解决问题,这也是最常见的一类问题,自己冲吧,哈哈。

CfgiCat 2020.01.10 15:25

相关的资源最好能提供下载就好了,比如写好的代码。这样省事不少哈。

国营 2020.01.10 15:29

我这是逼着大家自己写一下,这期间能发现很多问题,更能帮大家提升能力。

developer 2020.03.22 11:25

关于后台角色权限管理相关视频有没有,可以录制一个吗, 后台权限管理复杂,操作繁琐 每个地方都需要验证 如果可以的话对后台角色权限做一个录制视频,路由判断权限,后台添加删除权限等,因为这个动态的跟简单的项目不一样,希望考虑一下

国营 2020.03.22 13:07

首先你并没有把你的需求说清楚,所以你必须确认你理清了需求中的关键点。解决方法都是可以通过这些核心关键点推导出来的,另外我也想知道你都考虑过哪些方案,为什么这些方案不能解决你的问题,都遇到了哪些障碍? 这些障碍也是推导出你想要的解决方法的关键点,如果依旧找不到解决办法,我再帮你搞。每个项目都有其特殊性,不是说一套方案解决所有项目的问题。大部分人追求权限粒度越小越好,但没有几个项目真的有这样的需求。

developer 2020.03.22 13:48

我现在正开发一个后台系统,权限方面,我用的是gate 和policy 的解决方案, 每个model 需要创建一个policy来解决权限问题,因为权限的定义都存放在数据库中,我说实在话, 不知道从哪里开始, 文档里说 Gate:resource 定义后 多种权限并存, 但是我想把这些更简单化, 利用一个类,在数据库把每个model 都存放,读取权限表的时候,获取model 名称,生成show,create,update 等权限,这样也好,因为每个表model 中都存着四五中固定的权限 比如 can:create,App\Posts 等等,但是我想的是 can:posts.create 或者posts-create 的方式,(posts-create)中posts 是model 名称,按照这个判断 model posts 中的create权限 等方式, 我不知道说到重点了没有, 但是我现在思路很乱。 项目总监一会儿说这个一会儿说那个的

国营 2020.03.22 14:10

这个跟总监没什么关系,你先把需求和思路整明白再说吧,核心是看业务需要什么样的权限系统,不是你想采取什么方案。

developer 2020.03.22 14:25

角色:角色添加,每个角色有不同的权限,按照权限操作。 权限:每个模型的所有操作权限控制,权限控制方式,路由地址和指定的范围(比如说,稿件审核初审,二审,三审 等);

开发部分:为了以后的系统开发顺利执行,后台系统基础部分,权限判断写入的地方越少越好(这意思不是很多地方不需要验证),是一个公用的方式判断在数据库中存放的权限定义,开发中除了resource的路由外还有很多路由,可以自定义的方式添加 权限存放在缓存中调用最好。 这就是他的业务需求 。。。。。

ddwzdd 2020.03.27 18:39

站长,你好!请问在视频里面没有像文档里把 Route::resource('posts', 'PostController'); 改成Gate::resource('posts', 'PostPolicy'); 也可以实现 post 权限管理?

国营 2020.03.28 01:53

你需要好好理清一下思路了。

dds813 2021.12.24 17:43

authorizeResource这个函数在使用过程中有问题呀,我看了他的源码,发现他生成的middleware指向的路由名称不对,比如我的model是Novel,我要调用show这个方法的时候,那么它最后生成的$this->middleware($middlewareName, $options)->only($methods);这里的only里面指向的路由名称是show,而实际上应该指向的是novels.show,所以我每次使用这个生成的middleware来验证都会返回403错误,我在Illuminate\Foundation\Auth\Access\AuthorizesRequests.php的authorizeResource里面加了一行$routePrefixName = Str::snake(class_basename($model)).'s';然后在生成$middleware

这个数组的时候改成了$middleware["can:{$ability},{$modelName}"][] = $routePrefixName.'.'.$method;这样他就可以指向novels.show,然后验证就通过了,但是我不知道我这样是否正确,站长帮忙看看是否可行,是否还有其他方法,或者是不是我的使用方法根本就有错误,才导致出现这个问题的

dds813 2021.12.25 08:30

站长在吗,上面的问题能帮我看看吗

国营 2021.12.25 09:05

https://stackoverflow.com/questions/56038234/laravel-authorizeresource-always-denies-access

抱歉,这几天太忙,你可以看看这篇内容,不同版本的 Laravel 具体细节似乎是不一致的,我平时工作很少直接使用authorizeResource,宁可一个函数里边写一个全线判断逻辑,因为Laravel作者最初设计时肯定有不周全的地方,导致后来一直又不断修正。

dds813 2021.12.25 09:30

我用https://stackoverflow.com/questions/56038234/laravel-authorizeresource-always-denies-access这篇文章里面提供的方法这样写,$this->authorizeResource(Novel::class, 'novels');还是不行,因为他会将middleware改成这样 $this->middleware(can:view, novels)->only('show');而不是novels.show

国营 2021.12.25 09:50

哈哈,这个问题你先探索吧,到时候把答案告诉我,我个人的建议是无需在这个问题上纠结。我家两个孩子轮换着病了两周,我也没怎么干活,很多事情需要忙。

微信扫码登录