gpt4 book ai didi

php - 使用策略的 this->authorize() 在 store() 方法中检查 laravel Controller

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:43:38 25 4
gpt4 key购买 nike

所以我正在阅读有关使用 laravel 策略来授予对我的应用程序资源的权限的信息,但是尽管我遵循了教程,但那里似乎存在问题。

我有一个无法通过 HTTP 请求创建的用户模型,除非其他用户具有“管理员”或“经纪人”的委托(delegate)角色。我理解并成功地使其适用于索引用户等其他操作如下:

AuthServiceProvider.php里面私有(private)里面$policies数组,我用 UserPolicy 注册了那个用户类就这样上课

class AuthServiceProvider extends ServiceProvider {

protected $policies = [
'App\Model' => 'App\Policies\ModelPolicy',
User::class => UserPolicy::class,
Insured::class => InsuredPolicy::class
];

public function boot(GateContract $gate)
{
$this->registerPolicies($gate);
}
}

定义 UserPolicy Controller 类:

class UserPolicy {

use HandlesAuthorization;

protected $user;

public function __construct(User $user) {
$this->user = $user;
}

public function index(User $user) {
$is_authorized = $user->hasRole('Admin');
return $is_authorized;
}

public function show(User $user, User $user_res) {

$is_authorized = ($user->id == $user_res->id);
return $is_authorized;
}

public function store() {
$is_authorized = $user->hasRole('Admin');
return $is_authorized;
}
}

然后在UserController里面类,在执行我使用的关键操作之前 this->authorize()根据用户的权限检查暂停或继续

class UserController extends Controller
{

public function index()
{
//temporary authentication here
$users = User::all();
$this->authorize('index', User::class);
return $users;
}

public function show($id)
{
$user = User::find($id);
$this->authorize('show', $user);
return $user;
}

public function store(Request $request) {


$user = new User;
$user->name = $request->get('name');
$user->email = $request->get('email');
$user->password = \Hash::make($request->get('password'));

$this->authorize('store', User::class);

$user->save();

return $user;

}
}

问题$this->authorize()总是在存储操作返回异常时停止进程:此操作未经授权。

我为 authorize() 的参数尝试了多种变体,但无法让它像索引操作一样工作

最佳答案

UserPolicy::classstore() 函数中,您没有传递用户模型对象:

public function store(User $user) {
$is_authorized = $user->hasRole('Admin');
return true;
}

缺少参数 User $user

也许这就是问题的原因。

关于php - 使用策略的 this->authorize() 在 store() 方法中检查 laravel Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40319065/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com