Laravel随笔 Policy模型策略

  1. 生成模型策略文件
  2. 编写模型策略文件
// 此处可以只有一个参数,也是默认当前登陆信息
// public function test(Admin $admin)
public function test(Admin $admin, Admin $model) {
	...
}

PS:注意,此处第一个参数代表当前登陆的信息,第二个参数代表控制器传过来的模型。

  1. 注册模型策略app/Providers/AuthServiceProvider.php
    protected $policies = [
        // 'App\Model' => 'App\Policies\ModelPolicy',
        Admin::class => AdminPolicy::class,
    ];
  1. 在控制器中使用模型策略文件
use Illuminate\Foundation\Auth\Access\AuthorizesRequests;
class AdminController extends Controller
{
    use AuthorizesRequests;
    public function index()
    {
        $admin = \Auth::user();
        
    	// 注意,使用$this->authorize时,必须引入AuthorizesRequests类
        $this->authorize('test', $admin);

		// 也可以用can方法
		auth('admin')->user()->can('test', $admin);
        return view('admin::auth.index');
    }
}

PS: can() 方法会根据第二个参数的模型的类型去授权策略注册表(第三步)里面去查找该模型对应的授权策略类,也就是你在 AuthServiceProvider 的 policies 属性指定的模型以及授权策略类对应关系:

  1. 前端也有@can标签,其作用相当于auth()->user()->can('test', $admin);
发布了68 篇原创文章 · 获赞 0 · 访问量 1722

猜你喜欢

转载自blog.csdn.net/qj4865/article/details/104850738