php - 如何在 Laravel 中将策略功能与中间件一起使用?
问题描述
我通过在策略中定义一个函数来使用中间件,如下所示:
在 UserPolicy.php 中:
public function accessUser(User $user)
{
return $user->inRole('admin');
}
public function manageUser(User $user, User $secondUser)
{
return $user->inRole('admin') || $secondUser->id === $user->id;
}
在 UserController.php 中:
public function __construct()
{
$this->middleware('can:accessUser', ['except' => ['show']]);
}
public function index(Request $request)
{
...
}
public function show(Request $request, User $user)
{
$this->authorize('manageUser', $user);
...
}
我正在使用admin
帐户。它适用于show
功能,但不适用于index
功能。为什么??我该怎么办?还有其他地方我应该定义accessUser
功能吗?
解决方案
此外,应该通过中间件将模型发送到策略..
public function __construct()
{
$this->middleware('can:accessUser, App\Models\User', ['except' => ['show']]);
}
它运作良好:)
推荐阅读
- jquery - PHP Mysql PDO 到 MSSQL /json /jquery /datatables
- java - Log4j :从控制台中排除日志,但为这些日志创建新的日志文件
- wordpress - 需要在 WordPress 中创建自定义表
- angular - 如何在 IONIC 3 中为 intl-tel-input 创建 IONIC 组件
- sql - Postgres 数据处理
- ios - 遇到内部错误运行命令:错误:由于 xcodebuild 失败无法启动 WebDriverAgent:“xcodebuild failed with code 70”
- cassandra-3.0 - 来自服务器的错误:code=1300 [Replica(s) failed to execute read] message="Operation failed
- batch-file - 如何模拟 Moo0 文件粉碎机的拖放功能?
- r - 选择唯一的 x 和 y 对以最小化一个值
- amazon-s3 - 如何通过预签名 URL 限制对 S3 存储桶的点击次数?