/** * Lấy tất cả permisions của các role của user * - Đối với từng role, permissions bao gồm của nó và của tất cả role ưcùng role_groupơ nhưng [level < hơn nó] * * @return \Illuminate\Database\Eloquent\Builder */ public function permissions() { // Role IDs tất cả roles attach trực tiếp với User + 'Roles cấp dưới của các roles đó' $role_ids = []; foreach ($this->getRoles() as $role) { /** @var \Minhbang\AccessControl\Models\Role $role */ $role_ids = array_merge($role_ids, $role->getInferiorIds(true)); } $role_ids = $role_ids ?: [-1]; return Permission::select('permissions.*')->join('permission_role', 'permission_role.permission_id', '=', 'permissions.id')->join('roles', 'roles.id', '=', 'permission_role.role_id')->whereIn('roles.id', $role_ids)->groupBy('permissions.id'); }