protected function saveOnePermission($permission) { $msg = sprintf('process %s(%s)', $unique = $permission['unique_tag'], $uri_tag = $permission['uri_tag']); if ($permission['ignore']) { Log::debug($msg . " ignore"); return; } $p = AclPermission::whereUniqueTag($unique)->first(); $force = $this->option('force'); // 存在, 并且不强制更新, 跳过 if ($p && !$force) { Log::info($msg . " skip(exists)"); return; } $model = $p && $force ? $p : new AclPermission(); $model->title = $permission['title']; $model->comment = $permission['comment']; $model->permission = $permission['permission']; $model->route_name = $permission['route_name']; $model->method = $permission['method']; $model->uri_pattern = $permission['uri_pattern']; $model->unique_tag = $permission['unique_tag']; $model->save(); $this->info(sprintf("%s\tdone(%s)", $msg, $p ? 'update' : 'new')); }
/** * Execute the console command. * * @return mixed */ public function handle() { $role = $this->argument('role'); $roleModel = AclRole::whereName($role)->first(); if (!$roleModel) { $this->error($msg = "the role {$role} does not exists"); throw new \InvalidArgumentException($msg); } $permission_args = $this->argument('permission'); $permModes = AclPermission::whereIn($this->option('unique-tag') ? 'unique_tag' : 'id', $permission_args)->get(); foreach ($permModes as $pm) { $rel = new AclRolePermission(); $rel->role_id = $roleModel->id; $rel->permission_id = $pm->id; $rel->save(); $this->info(sprintf('role: %d, perm: %d, rel: %d', $roleModel->id, $pm->id, $rel->id)); } }
private function getPermissions() { if (!$this->rolePermissions) { $this->rolePermissions = AclPermission::whereIn('id', function ($query) { /** @var $query \Illuminate\Database\Query\Builder */ $query->from(AclRolePermission::tableName())->select('permission_id')->whereIn('role_id', $this->getRoles()->lists('id')); })->get(); } return $this->rolePermissions; }