角色管理

<?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()]);
        }
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值