1.簡介(使用場景)
如果你有一個博客的后台項目
有一個需求,管理員可以隨意的刪除任何用戶,修改任何用戶
普通用戶沒有刪除權限這個時候就可以使用laravel的策略,
判斷當前用戶是否是管理員,如果是的話執行除卻自己以外的所有刪除操作
否則就不能刪除,或者修改信息
2.sql表(ddl)
is_admin
就是判斷用戶是否是管理員的字段默認為0
CREATE TABLE `users` (
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(191) COLLATE utf8mb4_unicode_ci NOT NULL,
`email` varchar(191) COLLATE utf8mb4_unicode_ci NOT NULL,
`email_verified_at` timestamp NULL DEFAULT NULL,
`password` varchar(191) COLLATE utf8mb4_unicode_ci NOT NULL,
`is_admin` tinyint(4) NOT NULL DEFAULT '0' COMMENT '是否是管理員',
`remember_token` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
`created_at` timestamp NULL DEFAULT NULL,
`updated_at` timestamp NULL DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `users_email_unique` (`email`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='用戶表';
3.用法
3.1視圖中的調用
由於寫的是資源路由所以使用的時候是delete方法
執行刪除,只好用form表單偽造請求
傳遞的參數(當前的用戶:全部信息)
3.2生成策略(對應User模型)
php artisan make:policy UserPolicy --model=User
此命令會在
App
下生成Policies\UserPolicy.php
目錄

3.3然后在app\Providers\AuthServiceProvider.php
注冊策略

3.3控制器中調用

3.4使用@can
函數在視圖中調用策略(會自動隱藏刪除按鈕,如果不是管理員則不顯示刪除按鈕)
