117 lines
3.0 KiB
PHP
117 lines
3.0 KiB
PHP
<?php
|
|
namespace App\Domains\Permission\Services;
|
|
|
|
use App\Core\Service;
|
|
use Illuminate\Validation\Rule;
|
|
use App\Exceptions\AuthException;
|
|
use Illuminate\Support\Collection;
|
|
use App\Models\Permission\Permission;
|
|
use Illuminate\Support\Facades\Validator;
|
|
use App\Domains\Permission\Repositories\PermissionRepository;
|
|
|
|
class PermissionService extends Service
|
|
{
|
|
protected $permissionRepository;
|
|
|
|
/**
|
|
* 构造函数
|
|
*
|
|
* @return void
|
|
*/
|
|
public function __construct(PermissionRepository $permissionRepository)
|
|
{
|
|
$this->permissionRepository = $permissionRepository;
|
|
}
|
|
|
|
public function forgetCachedPermissions()
|
|
{
|
|
$this->permissionRepository->forgetCached();
|
|
}
|
|
|
|
/**
|
|
* 所有权限
|
|
*
|
|
* @return Collection
|
|
*/
|
|
public function getPermissions(): Collection
|
|
{
|
|
return $this->permissionRepository->get();
|
|
}
|
|
|
|
/**
|
|
* 权限列表
|
|
*
|
|
* @param array $conditions
|
|
* @return void
|
|
*/
|
|
public function index($conditions = [])
|
|
{
|
|
return $this->permissionRepository->withConditions($conditions)->applyConditions()->get();
|
|
}
|
|
|
|
/**
|
|
* 添加\编辑权限
|
|
*
|
|
* @param array $attributes
|
|
* @return void
|
|
*/
|
|
public function store(array $attributes)
|
|
{
|
|
$attributes = array_only($attributes, array_merge(app(Permission::class)->getFillable(), ['children']));
|
|
|
|
$rule = [
|
|
'name' => ['regex:'.config('regex.namespace'), 'display_length:32', Rule::unique($this->permissionRepository->getTable(), 'name')->ignore($attributes['id'])],
|
|
'title' => ['display_length:32'],
|
|
'displayorder' => ['numeric', 'min:0', 'max:100'],
|
|
'status' => ['in:0,1'],
|
|
'icon' => [Rule::in(config('icon'))],
|
|
];
|
|
|
|
$message = [
|
|
'name.unique' => '权限标识必须唯一',
|
|
];
|
|
|
|
Validator::validate($attributes, $rule, $message);
|
|
|
|
if ($attributes['parent_id']) {
|
|
$parent = $this->permissionRepository->findById($attributes['parent_id']);
|
|
}
|
|
|
|
if (!$attributes['id']) {
|
|
$permission = $this->permissionRepository->create($attributes, $parent);
|
|
return $permission;
|
|
}
|
|
|
|
$permission = $this->permissionRepository->findById($attributes['id']);
|
|
|
|
if ($parent && $permission->parent_id !== $parent->id) {
|
|
$permission->appendToNode($parent);
|
|
}
|
|
|
|
$this->permissionRepository->setModel($permission)->update($attributes);
|
|
|
|
return $permission;
|
|
}
|
|
|
|
/**
|
|
* 删除
|
|
*
|
|
* @param int|string|array $ids
|
|
* @return bool
|
|
*/
|
|
public function destroy($ids)
|
|
{
|
|
$ids = is_array($ids) ? $ids : [$ids];
|
|
|
|
foreach ($ids as $value) {
|
|
if ($value < 38) {
|
|
throw new AuthException('系统初始化权限不能删除', AuthException::FORBIDDEN);
|
|
}
|
|
}
|
|
|
|
$this->permissionRepository->destroy($ids);
|
|
|
|
return true;
|
|
}
|
|
}
|