belongsToMany(Role::class, 'role_user'); } public function hasPermission2(string $permission): bool { // 加载角色和每个角色的权限 $roles = $this->roles()->with('permissions')->get(); // 判断是否有某个权限 return $roles->pluck('permissions')->flatten()->pluck('name')->contains($permission); } public function hasPermission(string $permission, int $ttl = 24 * 60 * 60): bool { $cacheKey = 'user_permissions_' . $this->id; $permissions = Redis::get($cacheKey); if (!$permissions) { $roles = $this->roles()->with('permissions')->get(); $permissions = $roles->pluck('permissions')->flatten()->pluck('name')->toArray(); Redis::setEx($cacheKey, $ttl, json_encode($permissions)); } else { $permissions = json_decode($permissions, true); } return in_array($permission, $permissions); } }