feat: 添加角色分页/详情/新增/更新/删除接口
This commit is contained in:
194
app/admin/controller/v1/Role.php
Normal file
194
app/admin/controller/v1/Role.php
Normal file
@@ -0,0 +1,194 @@
|
||||
<?php
|
||||
declare (strict_types = 1);
|
||||
|
||||
namespace app\admin\controller\v1;
|
||||
|
||||
use app\admin\exception\InvalidOperateException;
|
||||
use app\admin\model\v1\SysRoleAuthorityModel;
|
||||
use app\admin\model\v1\SysRoleModel;
|
||||
use app\admin\validate\v1\SysRoleValidate;
|
||||
|
||||
/**
|
||||
* 角色管理控制器
|
||||
*/
|
||||
class Role
|
||||
{
|
||||
// 角色分页
|
||||
public function index()
|
||||
{
|
||||
$params = request()->get([
|
||||
'name',
|
||||
'page/d' => 1,
|
||||
'size/d' => 10
|
||||
]);
|
||||
|
||||
$roles = SysRoleModel::withoutField([
|
||||
'pid',
|
||||
'created_at',
|
||||
'updated_at',
|
||||
'deleted_at'
|
||||
])
|
||||
->withSearch(['name'], [
|
||||
'name' => $params['name']??null
|
||||
])
|
||||
->order('id', 'desc');
|
||||
if (!request()->has('scene')) {
|
||||
$roles = $roles->paginate([
|
||||
'list_rows' => $params['size'],
|
||||
'page' => $params['page']
|
||||
]);
|
||||
} else if ('all' == request()->get('scene')) {
|
||||
$roles = $roles->select();
|
||||
}
|
||||
|
||||
return success('获取成功', $roles);
|
||||
}
|
||||
|
||||
// 角色详情
|
||||
public function read()
|
||||
{
|
||||
$id = request()->param('id');
|
||||
|
||||
$role = SysRoleModel::withoutField([
|
||||
'pid',
|
||||
'created_at',
|
||||
'updated_at',
|
||||
'deleted_at'
|
||||
])
|
||||
->bypk($id)
|
||||
->find();
|
||||
if (empty($role)) {
|
||||
return error('角色不存在');
|
||||
}
|
||||
|
||||
return success('获取成功', $role);
|
||||
}
|
||||
|
||||
// 角色新增
|
||||
public function save()
|
||||
{
|
||||
$post = request()->post([
|
||||
'name',
|
||||
'desc',
|
||||
// $[*].menu_id
|
||||
// $[*].permissions
|
||||
'menu_permission'
|
||||
]);
|
||||
$post['menu_permission'] = json_decode($post['menu_permission'], true);
|
||||
|
||||
$validate = new SysRoleValidate;
|
||||
if (!$validate->scene('create')->check($post)) {
|
||||
return error($validate->getError());
|
||||
}
|
||||
|
||||
SysRoleModel::startTrans();
|
||||
try {
|
||||
$role = SysRoleModel::create($post, ['name', 'desc']);
|
||||
if ($role->isEmpty()) {
|
||||
throw new InvalidOperateException('角色新增失败');
|
||||
}
|
||||
|
||||
$permissions = [];
|
||||
foreach ($post['menu_permission'] as $menu) {
|
||||
$permissions[] = [
|
||||
'role_id' => $role->id,
|
||||
'menu_id' => $menu['menu_id'],
|
||||
'permission' => array_reduce($menu['permission'], function($v1, $v2) {
|
||||
return $v1 | $v2;
|
||||
})
|
||||
];
|
||||
}
|
||||
$authority = (new SysRoleAuthorityModel)->saveAll($permissions);
|
||||
if ($authority->isEmpty()) {
|
||||
throw new InvalidOperateException('角色权限新增失败');
|
||||
}
|
||||
|
||||
SysRoleModel::commit();
|
||||
} catch (InvalidOperateException $e) {
|
||||
SysRoleModel::rollback();
|
||||
return error($e->getMessage());
|
||||
} catch (\Throwable $th) {
|
||||
SysRoleModel::rollback();
|
||||
return error('操作失败');
|
||||
}
|
||||
|
||||
return success('操作成功');
|
||||
}
|
||||
|
||||
// 角色更新
|
||||
public function update()
|
||||
{
|
||||
$id = request()->param('id');
|
||||
$put = request()->put([
|
||||
'name',
|
||||
'desc',
|
||||
// $[*].menu_id
|
||||
// $[*].permissions
|
||||
'menu_permission'
|
||||
]);
|
||||
$put['menu_permission'] = json_decode($put['menu_permission'], true);
|
||||
|
||||
$validate = new SysRoleValidate;
|
||||
if (!$validate->scene('update')->check($put)) {
|
||||
return error($validate->getError());
|
||||
}
|
||||
|
||||
SysRoleModel::startTrans();
|
||||
try {
|
||||
$role = SysRoleModel::bypk($id)->find();
|
||||
if (empty($rule)) {
|
||||
throw new InvalidOperateException('角色不存在');
|
||||
}
|
||||
|
||||
if (!$role->allowField(['name', 'desc'])->save($put)) {
|
||||
throw new InvalidOperateException('角色更新失败');
|
||||
}
|
||||
|
||||
$permissions = [];
|
||||
foreach ($put['menu_permission'] as $menu) {
|
||||
$permissions[] = [
|
||||
'role_id' => $role->id,
|
||||
'menu_id' => $menu['menu_id'],
|
||||
'permission' => array_reduce($menu['permission'], function($v1, $v2) {
|
||||
return $v1 | $v2;
|
||||
})
|
||||
];
|
||||
}
|
||||
|
||||
SysRoleAuthorityModel::destroy(function($query) use ($role) {
|
||||
$query->roleId($role->id);
|
||||
});
|
||||
$authority = (new SysRoleAuthorityModel)->saveAll($permissions);
|
||||
if ($authority->isEmpty()) {
|
||||
throw new InvalidOperateException('角色权限更新失败');
|
||||
}
|
||||
|
||||
SysRoleModel::commit();
|
||||
} catch (InvalidOperateException $e) {
|
||||
SysRoleModel::rollback();
|
||||
return error($e->getMessage());
|
||||
} catch (\Throwable $th) {
|
||||
SysRoleModel::rollback();
|
||||
return error('操作失败');
|
||||
}
|
||||
|
||||
return success('操作成功');
|
||||
}
|
||||
|
||||
// 角色删除
|
||||
public function delete()
|
||||
{
|
||||
$id = request()->param('id');
|
||||
|
||||
$role = SysRoleModel::bypk($id)->find();
|
||||
if (empty($role)) {
|
||||
return error('请确认要操作对象是否存在');
|
||||
}
|
||||
|
||||
if (!$role->delete()) {
|
||||
return error('操作失败');
|
||||
}
|
||||
|
||||
return success('操作成功');
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user