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下生成PoliciesUserPolicy.php目录

3.3然后在appProvidersAuthServiceProvider.php注册策略

3.3控制器中调用

3.4使用@can函数在视图中调用策略(会自动隐藏删除按钮,如果不是管理员则不显示删除按钮)

原文地址:https://www.cnblogs.com/yaoliuyang/p/13015064.html