laravel-permission使用知识点(慢更)
最近做的项目要用到laravel-permission,之前有了解过,但是是第一次使用这个包,下面记录一些使用时发现的一些点。如有不对,还请各位看官斧正。
中间件校验
使用
->middleware("permission:p1")
这种校验而auth
用的guard
不是auth.guards
的第一项时需要在用户模型中添加protected $guard_name = 'api'
属性(在auth配置文件中设置默认guard是不管用的),下面是分析先是关键源码
/** class=> Spatie\Permission\Guard */ /** * return collection of (guard_name) property if exist on class or object * otherwise will return collection of guards names that exists in config/auth.php. * @param $model * @return Collection */ public static function getNames($model): Collection { if (is_object($model)) { if (\method_exists($model, 'guardName')) { $guardName = $model->guardName(); } else { $guardName = $model->guard_name ?? null; } } if (!isset($guardName)) { $class = is_object($model) ? get_class($model) : $model; $guardName = (new \ReflectionClass($class))->getDefaultProperties()['guard_name'] ?? null; } if ($guardName) { return collect($guardName); } $res = collect(config('auth.guards')) ->map(function ($guard) { if (!isset($guard['provider'])) { return; } return config("auth.providers.{$guard['provider']}.model"); }) ->filter(function ($model) use ($class) { return $class === $model; }) ->keys(); return $res; } public static function getDefaultName($class): string { $default = config('auth.defaults.guard'); return static::getNames($class)->first() ?: $default; } }
- 解释:简单来说就是获取要使用的
guard
名,一般来说都会调用config("auth.defaults.guard")
,但是laravel-permission
是先把auth.guards
的键的第一项返回了,而且优先级比默认的guard
级别高,所以导致设置的默认guard
不生效
- 解释:简单来说就是获取要使用的
本作品采用《CC 协议》,转载必须注明作者和本文链接
推荐文章: