vd/app/Domains/Permission/Services/PermissionService.php
2019-02-26 18:12:25 +08:00

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;
}
}