101 lines
2.6 KiB
PHP
101 lines
2.6 KiB
PHP
<?php
|
|
|
|
namespace App\Admin\Services\System;
|
|
|
|
use App\Admin\Services\BaseService;
|
|
use Slowlyo\OwlAdmin\Admin;
|
|
|
|
class AdminRoleService extends BaseService
|
|
{
|
|
public function __construct()
|
|
{
|
|
$this->modelName = Admin::adminRoleModel();
|
|
}
|
|
|
|
public function list()
|
|
{
|
|
$query = $this->listQuery();
|
|
|
|
/** @var \Illuminate\Pagination\LengthAwarePaginator */
|
|
$list = $query->with(['menus', 'permissions'])->paginate(request()->input('perPage', 20));
|
|
$list->through(function ($item) {
|
|
$instance = $item->withoutRelations();
|
|
$instance->setAttribute('menu_ids', $item->menus->pluck('id'));
|
|
$instance->setAttribute('permission_ids', $item->permissions->pluck('id'));
|
|
|
|
return $instance;
|
|
});
|
|
$items = $list->items();
|
|
$total = $list->total();
|
|
|
|
return compact('items', 'total');
|
|
}
|
|
|
|
public function store($data): bool
|
|
{
|
|
$this->checkRepeated($data);
|
|
|
|
$columns = $this->getTableColumns();
|
|
|
|
$model = $this->getModel();
|
|
|
|
foreach ($data as $k => $v) {
|
|
if (! in_array($k, $columns)) {
|
|
continue;
|
|
}
|
|
|
|
$model->setAttribute($k, $v);
|
|
}
|
|
|
|
return $model->save();
|
|
}
|
|
|
|
public function update($primaryKey, $data): bool
|
|
{
|
|
$this->checkRepeated($data, $primaryKey);
|
|
|
|
$columns = $this->getTableColumns();
|
|
|
|
$model = $this->query()->whereKey($primaryKey)->first();
|
|
|
|
foreach ($data as $k => $v) {
|
|
if (! in_array($k, $columns)) {
|
|
continue;
|
|
}
|
|
|
|
$model->setAttribute($k, $v);
|
|
}
|
|
|
|
return $model->save();
|
|
}
|
|
|
|
public function checkRepeated($data, $id = 0)
|
|
{
|
|
$query = $this->query()->when($id, fn ($query) => $query->where('id', '<>', $id));
|
|
|
|
amis_abort_if($query->clone()
|
|
->where('name', $data['name'])
|
|
->exists(), __('admin.admin_role.name_already_exists'));
|
|
|
|
amis_abort_if($query->clone()
|
|
->where('slug', $data['slug'])
|
|
->exists(), __('admin.admin_role.slug_already_exists'));
|
|
}
|
|
|
|
public function savePermissions($primaryKey, $permissions): void
|
|
{
|
|
$model = $this->query()->whereKey($primaryKey)->first();
|
|
|
|
$model->permissions()->detach();
|
|
$model->permissions()->attach($permissions);
|
|
}
|
|
|
|
public function saveMenus($primaryKey, $menus): void
|
|
{
|
|
$model = $this->query()->whereKey($primaryKey)->first();
|
|
|
|
$model->menus()->detach();
|
|
$model->menus()->attach($menus);
|
|
}
|
|
}
|