<?php
namespace app\admin\controller\system;
use app\admin\model\SysMenu;
use app\admin\model\SysPermission;
use app\admin\service\SysRoleService;
use app\common\controller\BackendController;
use app\admin\model\SysRole;
use app\common\validate\SysRoleValidator;
use think\Db;
/**
* 角色控制器
* Class RoleController
* @package app\admin\controller\system
*/
class RoleController extends BackendController
{
protected $middleware = [
// 'AuthAdmin' => ['except' => []],
'CheckAdmin',
];
//获取列表
public function getAll()
{
$result = ['code' => 0, 'msg' => '获取成功'];
$result['data'] = SysRoleService::queryAll($this->request, false);
return json($result);
}
//获取
public function get()
{
$id = $this->request->request('id');
$result = ['code' => 0, 'msg' => '获取成功'];
//权限列表
$permissions = Db::name('sys_permission')
->field('id,pid,title')
->where([['status', '=', 1]])->select();
if ($id) {
$role = SysRole::where(['id' => $id])->find();
$result['role'] = $role;
//角色权限
$checked_permission_ids = Db::name('sys_role_permission')->where('role_id', $role['id'])->column('permission_id');
foreach ($permissions as $k => $rule) {
if (in_array($rule['id'], $checked_permission_ids)) {
$permissions[$k]['checked'] = true;
}
}
}
$result['permissions'] = $permissions;
return json($result);
}
//新增
public function add()
{
$data = $this->request->post();
$validator = new SysRoleValidator();
if (!$validator->check($data)) {
return json(['code' => 1, 'msg' => $validator->getError()]);
}
Db::startTrans();
try {
$results = [];
$role = new SysRole();
//保存角色信息
$results[] = $role->allowField(true)->save($data);
//保存角色权限
if ($this->request->has('permission_ids')) {
$role_permission_list = [];
$permission_ids = $this->request->post()['permission_ids'];
foreach ($permission_ids as $permission_id) {
$role_permission_list[] = ['role_id' => $role['id'], 'permission_id' => $permission_id];
}
$results[] = Db::name('sys_role_permission')->insertAll($role_permission_list);
}
if (in_array(false, $results, true)) {
Db::rollback();
return json(['code' => 1, 'msg' => '新建失败']);
}
Db::commit();
return json(['code' => 0, 'msg' => '新建成功']);
} catch (\Exception $e) {
Db::rollback();
return json(['code' => 1, 'msg' => $e->getMessage()]);
}
}
//修改
public function edit()
{
$data = $this->request->post();
$validator = new SysRoleValidator();
if (!$validator->check($data)) {
return json(['code' => 1, 'msg' => $validator->getError()]);
}
$role_permission_list = [];
if ($this->request->has('permission_ids')) {
$permission_ids = $this->request->post('permission_ids');
foreach ($permission_ids as $permission_id) {
$role_permission_list[] = ['role_id' => $data['id'], 'permission_id' => $permission_id];
}
}
Db::startTrans();
try {
$results = [];
$role = new SysRole();
//保存角色信息
$results[] = $role->allowField(true)->save($data, ['id' => $data['id']]);
//保存角色权限
$results[] = Db::name('sys_role_permission')->where('role_id', $data['id'])->delete();
$results[] = Db::name('sys_role_permission')->insertAll($role_permission_list);
if (in_array(false, $results, true)) {
Db::rollback();
return json(['code' => 1, 'msg' => '修改失败']);
}
Db::commit();
return json(['code' => 0, 'msg' => '修改成功']);
} catch (\Exception $e) {
Db::rollback();
return json(['code' => 1, 'msg' => $e->getMessage()]);
}
}
//删除
public function delete()
{
$id = $this->request->post('id');
$result = SysRole::destroy($id);
if ($result === false) {
return json(['code' => 1, 'msg' => '删除失败']);
}
return json(['code' => 0, 'msg' => '删除成功']);
}
/**
* 获取菜单
*/
public function getMenus()
{
$id = $this->request->request('id');
$result = ['code' => 0, 'msg' => '获取成功'];
//角色
$role = SysRole::where(['id' => $id])->find();
$result['role'] = $role;
//菜单列表
$permissions = SysMenu::field('id,pid,title')
->where([['status', '=', 1]])
->order('sort')
->select();
//角色菜单
$checked_permission_ids = Db::name('sys_role_menu')->where('role_id', $role['id'])->column('permission_id');
foreach ($permissions as $k => $rule) {
if (in_array($rule['id'], $checked_permission_ids)) {
$permissions[$k]['checked'] = true;
}
}
$result['menus'] = $permissions;
return json($result);
}
/**
* 获取权限
*/
public function getPermissions()
{
$id = $this->request->request('id');
$result = ['code' => 0, 'msg' => '获取成功'];
//角色
$role = SysRole::where(['id' => $id])->find();
$result['role'] = $role;
//权限列表
$permissions = SysPermission::field('id,pid,title')
->where([['status', '=', 1]])
->order('sort')
->select();
//角色权限
$checked_permission_ids = Db::name('sys_role_permission')->where('role_id', $role['id'])->column('permission_id');
foreach ($permissions as $k => $rule) {
if (in_array($rule['id'], $checked_permission_ids)) {
$permissions[$k]['checked'] = true;
}
}
$result['permissions'] = $permissions;
return json($result);
}
/**
* 设置菜单
*/
public function setMenus()
{
$role_id = $this->request->post('id');
$menu_ids = $this->request->post('menu_ids');
$role_permission_list = [];
foreach ($menu_ids as $permission_id) {
$role_permission_list[] = ['role_id' => $role_id, 'permission_id' => $permission_id];
}
Db::startTrans();
try {
$results = [];
//保存角色菜单
$results[] = Db::name('sys_role_menu')->where('role_id', $role_id)->delete();
$results[] = Db::name('sys_role_menu')->insertAll($role_permission_list);
if (in_array(false, $results, true)) {
Db::rollback();
return json(['code' => 1, 'msg' => '保存失败']);
}
Db::commit();
return json(['code' => 0, 'msg' => '保存成功']);
} catch (\Exception $e) {
Db::rollback();
return json(['code' => 1, 'msg' => $e->getMessage()]);
}
}
/**
* 设置权限
*/
public function setPermissions()
{
$role_id = $this->request->post('id');
$role_permission_list = [];
$permission_ids = $this->request->post('permission_ids');
foreach ($permission_ids as $permission_id) {
$role_permission_list[] = ['role_id' => $role_id, 'permission_id' => $permission_id];
}
Db::startTrans();
try {
$results = [];
//保存角色权限
$results[] = Db::name('sys_role_permission')->where('role_id', $role_id)->delete();
$results[] = Db::name('sys_role_permission')->insertAll($role_permission_list);
if (in_array(false, $results, true)) {
Db::rollback();
return json(['code' => 1, 'msg' => '修改失败']);
}
Db::commit();
return json(['code' => 0, 'msg' => '修改成功']);
} catch (\Exception $e) {
Db::rollback();
return json(['code' => 1, 'msg' => $e->getMessage()]);
}
}
}
角色管理
最新推荐文章于 2025-06-30 08:15:00 发布
这是一个用于后台角色管理的PHP控制器,包括获取角色列表、获取角色详情、新增角色、修改角色、删除角色、获取角色菜单和权限的功能。通过事务处理确保数据一致性,并使用验证器校验数据。
4103

被折叠的 条评论
为什么被折叠?



