You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

657 lines
26 KiB

<?php
namespace app\auth\controller\admin;
use app\auth\model\AuthGroupRule;
use app\auth\model\AuthRule;
use app\auth\model\AuthRuleParam;
use think\facade\View;
class Auth extends Base
{
/***
* 权限列表
* @return string
*/
public function auth()
{
//获取数据总数
$auth_rule_model = new AuthRule();
//获取数据信息
$dataList = $auth_rule_model->getListAll();
View::assign('dataList', $dataList);
//获取参数列表信息
$auth_rule_param_model = new AuthRuleParam();
$param = $auth_rule_param_model->getListByRule();
View::assign('param', $param);
return View::fetch('auth');
}
/**
* 权限组添加
* @return string
*/
public function authGroupAdd()
{
$auth_rule_model = new AuthRule();
if (request()->isPost()) {
$data = input('post.');
$data['uid'] = 2;
//权限值进行小写操作
$data['rule_val'] = strtolower($data['rule_val']);
$data['group_name'] = $data['rule_val'];
//判断是否存在
if ($data['id'] != "") {
$count = $auth_rule_model->where([
['id', '<>', $data['id']],
['rule_val', '=', $data['rule_val']],
['type', '=', 1]
])->count();
if ($count > 0) {
sendErrorMessage('1','该权限组已经存在,修改失败!');
}
} else {
$count = $auth_rule_model->where([
['rule_val' ,'=',$data['rule_val']],
['type','=', 1],
])->count();
if ($count > 0) {
sendErrorMessage('1','该权限组已经存在,添加失败!');
}
}
$res = $auth_rule_model->dataUpdate($data);
if (!$res) {
sendErrorMessage();
}
$this->createMenu();
return sendSuccessMessage();
} else {
$id = input('param.id', 0);
$data = $auth_rule_model->getOneData(['id' => $id]);
View::assign('data', $data);
return View::fetch('authgroupadd');
}
}
/**
* 权限组修改
* @return string
*/
public function authGroupUpdate()
{
return $this->authGroupAdd();
}
public function authGroupDelete()
{
$id = input('param.id', 0);
//查询该权限授权次数
$auth_group_rule_model = new AuthGroupRule();
$count = $auth_group_rule_model->where(['rule_id' => $id])->count('role_id');
if ($count > 0) {
return sendErrorMessage(1,'该权限组已被授权给角色,无法删除!');
}
$auth_rule_mode = new AuthRule();
//取该权限组的所有的权限
$group_name = $auth_rule_mode->where(['id' => $id, 'uid' => UID])->value('group_name');
$idList = $auth_rule_mode->where(['group_name' => $group_name, 'uid' => UID])->column('id');
$res = $auth_rule_mode->destroy($idList);
if ($res === false) {
return sendErrorMessage();
}
$this->createMenu();
return sendSuccessMessage();
}
/**
* 权限添加
* @return string
*/
public function authAdd()
{
$auth_rule_model = new AuthRule();
if (request()->isPost()) {
$data = input('post.');
$data['uid'] = UID;
//权限值进行小写操作
$data['rule_val'] = strtolower($data['rule_val']);
//获取所有的一级分类id
$idData = $auth_rule_model->where(['pid' => $data['group_id']])->column('id');
$group_module = $auth_rule_model->where(['id'=>$data['group_id']])->value('module');
array_push($idData, $data['group_id']);
//判断是否存在
if ($data['id'] != "") {
$count = $auth_rule_model->getNumber([['id', '<>', $data['id']], ['rule_val', '=', $data['rule_val']], ['pid', 'in', $idData], ['uid', '=', UID]]);
if ($count > 0) {
return sendErrorMessage(1,'该权限已经存在,修改失败!');
}
} else {
$count = $auth_rule_model->getNumber([['rule_val', '=', $data['rule_val']], ['pid', 'in', $idData], ['uid', '=', UID]]);
if ($count > 0) {
return sendErrorMessage(1,'该权限已经存在,添加失败!');
}
}
$data['module'] = $group_module;
$data['rule_url'] = strtolower($group_module."/" . $data['group_val'] . "/" . $data['rule_val']);
$data['group_name'] = $data['group_val'];
if ($data['type'] == 2) {
$data['pid'] = $data['group_id'];
}
$res = $auth_rule_model->dataUpdate($data);
if (!$res) {
return sendErrorMessage();
}
$this->createMenu();
return sendSuccessMessage();
} else {
$id = input('param.id', 0);
$groupid = input('param.groupid', 0);
//获取组信息
$group = $auth_rule_model->getOneData(['id' => $groupid]);
View::assign('group', $group);
//获取权限信息
$data = $auth_rule_model->getOneData(['id' => $id]);
View::assign('data', $data);
//获取该权限组下已经权限列表
$pidlist = $auth_rule_model->getAllData(['pid' => $groupid], 'id,title,rule_val');
View::assign('pidlist', $pidlist);
return View::fetch('authadd');
}
}
/**
* 权限修改
* @return string
*/
public function authUpdate()
{
return $this->AuthAdd();
}
/*
* 权限删除
*/
public function authDelete()
{
$id = input('param.id', 0);
//查询该权限授权次数
$auth_group_rule_model = new AuthGroupRule();
$count = $auth_group_rule_model->where(['rule_id' => $id])->count('role_id');
if ($count > 0) {
return sendErrorMessage(1,'该权限已被授权给角色,无法删除!');
}
$auth_rule_mode = new AuthRule();
$type = $auth_rule_mode->where(['id' => $id])->value('type');
if ($type == 2) {
$idlist = $auth_rule_mode->where(['pid' => $id])->column('id');
array_push($idlist, $id);
$res = $auth_rule_mode->destroy($idlist);
} else {
$res = $auth_rule_mode->destroy($id);
}
if ($res === false) {
return sendErrorMessage();
}
$this->createMenu();
return sendSuccessMessage();
}
//批量添加权限
public function authBatchAdd()
{
$auth_rule_model = new AuthRule();
if (request()->isPost()) {
$data = input('post.');
$auth = $data['rule'];
$one_auth_val = [];
foreach ($auth as $value) {
$one_auth_val[] = $value['rule_val'];
//判断是否库中已存在
$count = $auth_rule_model->getNumber(['type' => 2, 'pid' => $data['group_id'], 'rule_val' => $value['rule_val']]);
if ($count > 0) {
return sendErrorMessage(1,'一级权限:' . $value['title'] . "已添加过,不可重复添加!");
}
$two_auth_val = [];
if (!empty($value['twolevel'])) {
foreach ($value['twolevel'] as $val) {
$two_auth_val[] = $val['rule_val'];
}
}
//判断是否有重复值 (每个一级权限下的二级权限)
$unique_arr = array_unique($two_auth_val);
if (count($two_auth_val) != count($unique_arr)) {
// 获取重复数据的数组
// $repeat_arr = array_diff_assoc($two_auth_val, $unique_arr);
// $arr= implode(',', $repeat_arr);
return sendErrorMessage(1,'一级权限:' . $value['title'] . "下的二级权限值有重复,不可添加!");
}
}
//判断一级权限是否有重复
$unique_one = array_unique($one_auth_val);
if (count($one_auth_val) != count($unique_one)) {
// 获取重复数据的数组
$repeat_arr = array_diff_assoc($one_auth_val, $unique_one);
$arr = implode(',', $repeat_arr);
return sendErrorMessage(1,'一级权限' . $arr . "重复,不可添加!");
}
$group_module = $auth_rule_model->getOneData(['id'=>$data['group_id']],'module');
//拼接数组,事务提交信息
$auth_rule_model->startTrans();
foreach ($auth as $value) {
$temp = [
'uid' => UID,
'type' => 2,
'module' => $group_module,
'title' => $value['title'],
'rule_val' => $value['rule_val'],
'sort' => $value['sort'],
'is_total_visible' => $value['is_total_visible'],
'is_sub_visible' => $value['is_sub_visible'],
'pid' => $data['group_id'],
'group_name' => $data['group_val'],
'rule_url' => strtolower($group_module."/" . $data['group_val'] . "/" . $value['rule_val'])
];
$res = $auth_rule_model->dataUpdate($temp);
if ($res == false) {
$auth_rule_model->rollback();
return sendErrorMessage(1,'权限(一级)添加失败');
}
if (!empty($value['twolevel'])) {
foreach ($value['twolevel'] as $val) {
$tep = [
'uid' => UID,
'type' => 3,
'module' => $group_module,
'title' => $val['title'],
'rule_val' => $val['rule_val'],
'sort' => $val['sort'],
'pid' => $res,
'group_name' => $data['group_val'],
'rule_url' => strtolower($group_module."/" . $data['group_val'] . "/" . $val['rule_val'])
];
$res1 = $auth_rule_model->dataUpdate($tep);
if ($res1 == false) {
$auth_rule_model->rollback();
return sendErrorMessage(1,'权限(二级)添加失败');
}
}
}
}
$auth_rule_model->commit();
$this->createMenu();
return sendSuccessMessage();
} else {
$id = input('param.id', 0);
$groupid = input('param.groupid', 0);
//获取组信息
$group = $auth_rule_model->getOneData(['id' => $groupid]);
View::assign('group', $group);
return View::fetch('authbatchadd');
}
}
//批量修改权限
public function authBatchUpdate()
{
$auth_rule_model = new AuthRule();
$auth_group_rule_model = new AuthGroupRule();
if (request()->isPost()) {
$data = input('post.');
$auth = $data['rule'];
$one_auth_val = [];
$auth_all_id = [];
foreach ($auth as $value) {
$one_auth_val[] = $value['rule_val'];
if ($value['id'] > 0) {
$auth_all_id[] = $value['id'];
}
$two_auth_val = [];
if (!empty($value['twolevel'])) {
foreach ($value['twolevel'] as $val) {
if ($val['id'] > 0) {
$auth_all_id[] = $val['id'];
}
$two_auth_val[] = $val['rule_val'];
}
}
//判断是否有重复值 (每个一级权限下的二级权限)
$unique_arr = array_unique($two_auth_val);
if (count($two_auth_val) != count($unique_arr)) {
// 获取重复数据的数组
// $repeat_arr = array_diff_assoc($two_auth_val, $unique_arr);
// $arr= implode(',', $repeat_arr);
return sendErrorMessage(1,'一级权限:' . $value['title'] . "下的二级权限值有重复,不可添加!");
}
}
//判断一级权限是否有重复
$unique_one = array_unique($one_auth_val);
if (count($one_auth_val) != count($unique_one)) {
// 获取重复数据的数组
$repeat_arr = array_diff_assoc($one_auth_val, $unique_one);
$arr = implode(',', $repeat_arr);
return sendErrorMessage(1,'一级权限' . $arr . "重复,不可添加!");
}
// var_dump($auth_all_id);
//获取删除数组
$delete_id_all = $auth_rule_model->where([['id', 'NOT IN', $auth_all_id], ['type', 'IN', [2, 3]], ['group_name', '=', $data['group_val']]])->column('id');
// var_dump($delete_id_all);
// exit();
//查询该权限授权次数
if (!empty($delete_id_all)) {
$set_count = $auth_group_rule_model->getCountByRuleMany($delete_id_all);
if ($set_count > 0) {
return sendErrorMessage(1,"删除权限已被授权给角色,无法删除!");
}
}
//拼接数组,事务提交信息
$auth_rule_model->startTrans();
//删除权限
if (!empty($delete_id_all)) {
$delete_re = $auth_rule_model->destroy($delete_id_all);
if ($delete_re == false) {
$auth_rule_model->rollback();
return sendErrorMessage(1,'权限修改失败!');
}
}
$group_module = $auth_rule_model->getOneData(['id'=>$data['group_id']],'module');
foreach ($auth as $value) {
if ($value['id'] > 0) {
$temp = [
'id' => $value['id'],
'uid' => UID,
'type' => 2,
'module' => $group_module,
'title' => $value['title'],
'rule_val' => $value['rule_val'],
'sort' => $value['sort'],
'is_total_visible' => $value['is_total_visible'],
'is_sub_visible' => $value['is_sub_visible'],
'pid' => $data['group_id'],
'group_name' => $data['group_val'],
'rule_url' => strtolower($group_module."/" . $data['group_val'] . "/" . $value['rule_val']),
'update_time' => time()
];
$res = $auth_rule_model->dataUpdate($temp);
if ($res == false) {
$auth_rule_model->rollback();
return sendErrorMessage(1,'权限(一级)修改失败');
}
if (!empty($value['twolevel'])) {
foreach ($value['twolevel'] as $val) {
if ($val['id'] > 0) {
$tep = [
'id' => $val['id'],
'uid' => UID,
'type' => 3,
'module' => $group_module,
'title' => $val['title'],
'rule_val' => $val['rule_val'],
'sort' => $val['sort'],
'pid' => $res,
'group_name' => $data['group_val'],
'rule_url' => strtolower($group_module."/" . $data['group_val'] . "/" . $val['rule_val']),
'update_time' => time()
];
$res1 = $auth_rule_model->dataUpdate($tep);
if ($res1 == false) {
$auth_rule_model->rollback();
return sendErrorMessage(1,'权限(二级)修改失败');
}
} else {
$tep = [
'uid' => UID,
'type' => 3,
'module' => $group_module,
'title' => $val['title'],
'rule_val' => $val['rule_val'],
'sort' => $val['sort'],
'pid' => $res,
'group_name' => $data['group_val'],
'rule_url' => strtolower($group_module."/" . $data['group_val'] . "/" . $val['rule_val'])
];
$res1 = $auth_rule_model->dataUpdate($tep);
if ($res1 == false) {
$auth_rule_model->rollback();
return sendErrorMessage(1,'权限(二级)添加失败');
}
}
}
}
} else {
$temp = [
'uid' => UID,
'type' => 2,
'module' => $group_module,
'title' => $value['title'],
'rule_val' => $value['rule_val'],
'sort' => $value['sort'],
'is_total_visible' => $value['is_total_visible'],
'is_sub_visible' => $value['is_sub_visible'],
'pid' => $data['group_id'],
'group_name' => $data['group_val'],
'rule_url' => strtolower($group_module."/" . $data['group_val'] . "/" . $value['rule_val'])
];
$res = $auth_rule_model->dataUpdate($temp);
if ($res == false) {
$auth_rule_model->rollback();
return sendErrorMessage(1,'权限(一级)添加失败');
}
if (!empty($value['twolevel'])) {
foreach ($value['twolevel'] as $val) {
$tep = [
'uid' => UID,
'type' => 3,
'module' => $group_module,
'title' => $val['title'],
'rule_val' => $val['rule_val'],
'sort' => $val['sort'],
'pid' => $res,
'group_name' => $data['group_val'],
'rule_url' => strtolower($group_module."/" . $data['group_val'] . "/" . $val['rule_val'])
];
$res1 = $auth_rule_model->dataUpdate($tep);
if ($res1 == false) {
$auth_rule_model->rollback();
return sendErrorMessage(1,'权限(二级)添加失败');
}
}
}
}
}
$auth_rule_model->commit();
$this->createMenu();
return sendSuccessMessage();
} else {
$id = input('param.id', 0);
$groupid = input('param.groupid', 0);
//获取组信息
$group = $auth_rule_model->getOneData(['id' => $groupid]);
View::assign('group', $group);
//获取改组所有的权限信息
$one_level = $auth_rule_model->getAllData(['pid' => $groupid, 'type' => 2], "id,title,rule_val,sort,is_total_visible,is_sub_visible", "sort desc");
if (!empty($one_level)) {
foreach ($one_level as $key => $value) {
$two_level = $auth_rule_model->getAllData(['type' => 3, 'pid' => $value['id']], "id,title,rule_val,sort,is_total_visible,is_sub_visible", "sort desc");
if (!empty($two_level)) {
$value['twolevel'] = $two_level->toArray();
} else {
$value['twolevel'] = [];
}
$one_level[$key] = $value;
}
}
View::assign('auth', $one_level);
return View::fetch('authbatchupdate');
}
}
/**
* 权限参数
* @return string
*/
public function authParam()
{
$id = input('param.id', 0);
$auth_rule_param_model = new AuthRuleParam();
$dataList = $auth_rule_param_model->getAllData(['rule_id' => $id], '', 'sort desc, id asc');
View::assign('dataList', $dataList);
//获取权限相关信息
$auth_rule_model = new AuthRule();
$rule = $auth_rule_model->getOneData(['id' => $id]);
View::assign('rule', $rule);
return View::fetch('authparam');
}
/*
* 权限参数添加
*/
public function authParamAdd()
{
$auth_rule_param_model = new AuthRuleParam();
if (request()->isPost()) {
$data = input('post.');
$data['uid'] = UID;
//权限值进行小写操作
$data['param_val'] = strtolower($data['param_val']);
//判断是否存在
if ($data['id'] != "") {
$count = $auth_rule_param_model->getNumber([['id', '<>', $data['id']], ['param_val', '=', $data['param_val']], ['rule_id', '=', $data['rule_id']], ['uid', '=', UID]]);
if ($count > 0) {
return sendErrorMessage(1,'该参数已经存在,修改失败!');
}
} else {
$count = $auth_rule_param_model->getNumber(['param_val' => $data['param_val'], 'rule_id' => $data['rule_id'], 'uid' => UID]);
if ($count > 0) {
return sendErrorMessage(1,'该参数已经存在,添加失败!');
}
}
$res = $auth_rule_param_model->dataUpdate($data);
if (!$res) {
return sendErrorMessage();
}
$this->createMenu();
return sendSuccessMessage();
} else {
$id = input('param.id', 0);
$rule_id = input('param.rule_id');
//获取权限信息
$auth_rule_model = new AuthRule();
$rule = $auth_rule_model->getOneData(['id' => $rule_id]);
View::assign('rule_id', $rule_id);
View::assign('rule', $rule);
//获取参数信息
$data = $auth_rule_param_model->getOneData(['id' => $id]);
View::assign('data', $data);
return View::fetch('authparamadd');
}
}
public function authParamDelete()
{
$id = input('param.id', 0);
$auth_rule_param_model = new AuthRuleParam();
$res = $auth_rule_param_model->destroy( $id);
$this->createMenu();
if ($res === false) {
return sendErrorMessage();
}
return sendSuccessMessage();
}
/*
* 权限参数修改
*/
public function authParamUpdate()
{
return $this->authParamAdd();
}
/**
* 更改排序
* @return \think\response\Json
*/
public function updateFieldModel()
{
$data = input('post.');
if($data['childrenModel'])
{
$model = invoke('app\\'.$data['model'].'\\model\\' .$data['childrenModel'].'\\'. parse_name($data['table'], 1));
}else{
$model = invoke('app\\'.$data['model'].'\\model\\' . parse_name($data['table'], 1));
}
if (array_key_exists('operate_value', $data) && $data['operate_value'] == 'sort') {
$data['id'] = json_decode($data['id'], true);
$res = $model->saveAll($data['id']);
} else {
$update_data = [$data['field'] => $data['value']];
if ($data['field'] == "delete_time") {
$data['value'] = time();
}
if($data['field'] == 'is_publish'){
if($data['value'] == 0)
{
$update_data['publish_time'] = 0;
}else{
$update_data['publish_time'] = time();
}
}
if($data['field'] == 'is_recommend'){
if($data['value'] == 0)
{
$update_data['recommend_time'] = 0;
}else{
$update_data['recommend_time'] = time();
}
}
$res = $model->where(['id'=>$data['id']])->update($update_data);
}
if ($res === false) {
return sendErrorMessage();
}
$this->createMenu();
return sendSuccessMessage();
}
public function index()
{
$this->createMenu();
}
/**
* 调用生成菜单方法
* @auth Alan
* @time 2019-02-27
*/
public function createMenu()
{
$authLogic = new \app\auth\logic\Auth();
$authLogic->createMenu();
}
}