laravel 授权策略
- 作者 : zfajax舫
- |
- 发布时间 : 6年前
- |
- 评论数 : 0
- 查看数 : 852
第一步 创建policy政策
$ php artisan make:policy UserAddressPolicy
第二步 编辑策略文件
<?php
namespace App\Policies;
use App\Models\User;
use App\Models\UserAddress;
use Illuminate\Auth\Access\HandlesAuthorization;
class UserAddressPolicy
{
use HandlesAuthorization;
/**
* Create a new policy instance.
*
* @return void
*/
public function __construct()
{
//
}
/**
* @param User $user 当前登陆用户数据
* @param UserAddress $address 当前编辑的地址user_id
* @return bool
*/
public function own(User $user, UserAddress $address)
{
return $address->user_id == $user->id;
}
}
第三步 第一种方法 对授权策略进行注册5.8以上laravel 以上新写法--自动授权注册
打开文件app\Providers\AuthServiceProvider.php
namespace App\Providers;
.
.
.
class AuthServiceProvider extends ServiceProvider
{
.
.
.
public function boot()
{
$this->registerPolicies();
// 修改策略自动发现的逻辑
Gate::guessPolicyNamesUsing(function ($modelClass) {
// 动态返回模型对应的策略名称,如:// 'App\Model\User' => 'App\Policies\UserPolicy',
return 'App\Policies\\'.class_basename($modelClass).'Policy';
});
}
}
第三步 第二种方法 对授权策略进行注册 使用第一种写法可以忽略
打开文件app\Providers\AuthServiceProvider.php
use App\Models\UserAddress;
use App\Policies\UserAddressPolicy;
.
.
.
protected $policies = [
'App\Model' => 'App\Policies\ModelPolicy',
UserAddress::class => UserAddressPolicy::class,
];
.
.
.
第四部 书写到控制器中相应的方法
public function edit(User $user)
{
$this->authorize('own', $user); #自己体会吧
return view('users.edit', compact('user'));
}