问题标签 [laravel-gate]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
2107 浏览

laravel - App\Http\Requests\UserUpdateRequest::user() 的声明应该与 Illuminate\Http\Request::user($guard = NULL) 兼容

我正在尝试支持并实现 FormRequest 对象以进行验证。我已经成功地为我的所有模型设置了表单请求,除了用户模型。我收到以下错误Declaration of App\Http\Requests\UserUpdateRequest::user() should be compatible with Illuminate\Http\Request::user($guard = NULL)。研究此错误似乎是我通过策略处理授权的方式存在问题。请注意,UserStoreRequest有效,但UserUpdateRequest返回错误。

用户存储请求

用户更新请求

如您所见,我已经注释掉了 UpdateRequest 的大部分代码以进行故障排除。看来问题出在authorize()方法上。下面是来自UserPolicy的代码

用户策略

用户控制器

我正在为此系统使用基于权限的授权。用户有hasPermission()方法来验证用户是否具有执行操作所需的权限。我担心我对这个设置感到困惑并且我没有正确验证。在尝试在 User 模型上实现它之前,一切都已经完成。

有权限()

有角色()

更新

我尝试重命名UserUpdateRequest中的user()方法来解决覆盖Request用户的任何问题。这清除了上面列出的错误,但随后未经授权返回响应。登录的用户具有允许更新用户的权限。这在使用的方法中调用。我只是不确定它是在检查登录用户还是模型用户。frank()authorize()Gate::allows

我进一步调查发现,将方法更改为frank(). 我越来越Call to a member function update() on null。我应该从 frank 方法返回从路由中提取的用户,但它似乎返回 null。

更新了 UserUpdateRequest

0 投票
1 回答
108 浏览

laravel - 在 Laravel 中使用 Gates 隐藏 API 资源中的字段

我的应用程序中有一个产品 API 资源,就像这样

我的应用程序中的角色很少,例如管理员、查看者。当管理员访问 api 时,api 返回所有字段,但是当查看者访问 api 时,它只返回有限的字段。

我该如何处理这个使用Gates & Policies

我可以做这样的事情吗

'createdAt' => $this->when($this->authorize('product.list'), $this->created_at)

0 投票
1 回答
1925 浏览

laravel - 如何在中间件中通过多个门?(拉拉维尔)

我正在为我的大学最后一年项目创建一个学习管理系统(最近才引入 laravel)。我设置了三个不同的角色(管理员、讲师和学生)。我创建了两个视图,只有管理员和讲师可以访问,“用户管理”和“课程管理”。在每个管理员和讲师中,可以根据需要创建用户/课程并删除.. 学生无法查看这些或有权访问,以便按需要工作。为此,我创建了一个门“管理用户”,然后将其传递给中间件。

我现在创建了一个日历,我希望所有用户角色都可以查看.. 我再次为此创建了一个门.. 由于我当前的中间件,当学生尝试查看日历时,我得到“未经授权的访问”.. 是可以通过中间件中的另一个门吗?我试图这样做但没有成功。经过多次尝试和错误,我在这里提出了一个问题,希望我能解决这个问题......我将在下面粘贴我的代码..任何帮助表示赞赏。

AuthServiceProvider.php

网页.php

我知道问题出在我定义的门禁管理用户中。我不知道该怎么做才能保护我的其他路线免受学生和教师的伤害...

提前致谢 :)

0 投票
2 回答
119 浏览

php - Gate::after():返回非空值不改变授权结果

根据 laravel 官方文档,

如果after回调返回非空结果,则该结果将被视为检查结果。

但是当我回调之后声明并将值覆盖为false时,它仍然返回以前的值。

我错过了什么?如何覆盖Gate::after中的值?

0 投票
1 回答
717 浏览

php - 如何让我的自定义门在 Laravel 中工作?

我正在尝试创建一个自定义门,允许“管理员”团队的用户访问用户索引页面。但是,它的功能与我想要实现的完全相反,我似乎不明白我在哪里错了。

无论用户是否属于管理团队,它总是返回“false”。

帮助表示赞赏。谢谢你。

用户.php:

AuthServiceProvider.php :

用户控制器.php:

index.blade.php :

输出 :

图片

0 投票
1 回答
440 浏览

laravel - Gate Define 不适用于除 role_id 为 1 的其他用户

当用户的角色 ID 为 1 时,中间件中的以下代码工作正常,当我在角色->权限上执行 dd 时,我得到的响应是数组。

但是在这个中间件线上

对于 role_id 不同的所有其他用户,我都会收到此错误

in_array(): 参数 #2 ($haystack) 必须是数组类型,给定数组传递的字符串

我的角色模型有

我的用户模型有

我的网络中间件组有

我的 Meddlware 有

0 投票
1 回答
118 浏览

laravel - 在 Laravel 中,如何在 Route::middleware 组中使用“cannot”?

我有自己的 Laravel 门定义“isAdmin”和“isManager”。“auth”中间件仅表示用户已登录。我的路线如下所示(大大简化):

但是对于既不是管理员也不是经理的登录用户的路由我该怎么办?我想这样做:

有人有什么想法吗?谢谢。

0 投票
3 回答
702 浏览

php - 在 Laravel 中,如果您使用自定义身份验证,如何使用 Gate?

我想在 Laravel 8 中使用 Gates,但我们使用的是自定义身份验证,所以 Laravel 不知道要传递给 Gate 的 $user 记录。那么如何告诉 Laravel 某个用户当前已登录,所以会使用正确的用户记录呢?

谢谢。

0 投票
1 回答
175 浏览

laravel - Laravel 8 Gate 问题我试图用不同的模型检查条件,但有错误显示

在我的 laravel 8 iam 中定义门但是有一些问题我的门只接受一个模型名称是管理员当我尝试检查另一个模型名称时出现错误显示

这是我的 authserviceprovider

命名空间应用\提供者;

使用 App\Models\Admin\Role;使用 Illuminate\Foundation\Support\Providers\AuthServiceProvider 作为 ServiceProvider;使用 Illuminate\Support\Facades\Gate;

class AuthServiceProvider extends ServiceProvider { /** * 应用程序的策略映射。* * @var 数组 */ protected $policies = [ // 'App\Models\Model' => 'App\Policies\ModelPolicy', ];

}

这是控制器

错误信息

App\Providers\AuthServiceProvider::App\Providers{closure}():参数 #1 ($role) 必须是 App\Models\Admin\Role 类型,App\Models\Admin 给定,在 D:\xampp\htdocs 中调用\education\vendor\laravel\framework\src\Illuminate\Auth\Access\Gate.php 在第 477 行 http://127.0.0.1:8000/admin/users

0 投票
0 回答
59 浏览

laravel - 为什么我的 Gate 总是拒绝 laravel 上的请求

这里帮助不大。我有两个模型用户和帖子。所以我想限制用户编辑其他用户的帖子,所以我使用了这个:

在 App\Providers\AuthServiceProvider.php 中。在我的控制器中的编辑方法中,我使用以下代码:

它可以工作,但是当我从两个用户帐户中单击编辑按钮时,它会转到我在编辑控制器上重定向的内容。

那我该如何解决呢,求大神帮忙!!!