laravel 授权策略
2018年1月26日1.创建policy政策
1 |
$ php artisan make:policy UserAddressPolicy |
2.编辑策略文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
<?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; } } |
3.1对授权策略进行注册5.8以上laravel 以上新写法–自动授权注册
打开文件app\Providers\AuthServiceProvider.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
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'; }); } } |
3.2对授权策略进行注册 使用新写法可以忽略
打开文件app\Providers\AuthServiceProvider.php
1 2 3 4 5 6 7 8 9 10 11 12 |
use App\Models\UserAddress; use App\Policies\UserAddressPolicy; . . . protected $policies = [ 'App\Model' => 'App\Policies\ModelPolicy', UserAddress::class => UserAddressPolicy::class, ]; . . . |
4.书写到控制器中相应的方法
1 2 3 4 5 |
public function edit(User $user) { $this->authorize('own', $user); #自己体会吧 return view('users.edit', compact('user')); } |