laravel-策略模型用法詳解


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函數在視圖中調用策略(會自動隱藏刪除按鈕,如果不是管理員則不顯示刪除按鈕)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM