isAjax()){
$param = input('param.');
$limit = $param['pageSize'];
$offset = ($param['pageNumber'] - 1) * $limit;
try {
$gdb = db('groups');
$group_id = $gdb->where('admin_id', $this->admin_id)->value('id');
if($this->is_root != true && empty($group_id)){
return json(['code' => -1, 'data' => '', 'msg' => '您没有该权限']);
}
$where = [];
if ($this->is_root != true) {
$where['group_id'] = $group_id;
} else {
if ($param['group_id'] != -1) {
$where['group_id'] = $param['group_id'];
}
}
if ($param['ip']) {
$where['ip'] = trim($param['ip']);
}
$data = db('white_ip')->where($where)->limit($offset, $limit)->order('id desc')->select();
if ($data) {
$admin_id_arr = array_column($data, 'oper');
// 管理员名称
$admin_arr = db('admins')->where('id', 'in', $admin_id_arr)->column('user_name', 'id');
$group_id_arr = array_column($data, 'group_id');
// 平台名称
$group_arr = $gdb->where('id', 'in', $group_id_arr)->column('name', 'id');
foreach($data as $key => $vo){
// 生成操作按钮
$data[$key]['operate'] = $this->makeBtn($vo['id']);
// 管理员名称
$data[$key]['admin_name'] = isset($admin_arr[$vo['oper']]) ? $admin_arr[$vo['oper']] : '--';
// 平台名称
if ($vo['group_id']) {
$data[$key]['group_name'] = isset($group_arr[$vo['group_id']]) ? $group_arr[$vo['group_id']] : '--';
} else {
$data[$key]['group_name'] = '超管';
}
}
}
$return['total'] = db('white_ip')->where($where)->count(); //总数据
$return['rows'] = $data;
return json($return);
} catch (\Exception $e){
return json(['code' => -1, 'data' => '', 'msg' => $e->getMessage()]);
}
}
$group_info = [];
if ($this->is_root) {
$group_info = db('groups')->where('status', 1)->column('name', 'id');
}
// var_dump($group_info);exit;
$this->assign([
'is_root' => $this->is_root ? 1 : 0,
'group_info' => $group_info,
]);
return $this->fetch();
}
// 添加
public function add_white_ip()
{
if(request()->isPost()){
$param = input('post.');
try{
if ($this->is_root) {
$group_id = $param['group_id'];
} else {
$gdb = db('groups');
$group_id = $gdb->where('admin_id', $this->admin_id)->value('id');
if($this->is_root != true && empty($group_id)){
return json(['code' => -1, 'data' => '', 'msg' => '您没有该权限']);
}
}
$param['ip'] = htmlentities($param['ip']);
$where = ['ip' => $param['ip'], 'group_id' => $group_id];
$db_white_ip = db('white_ip');
$has = $db_white_ip->field('id')->where($where)->find();
if(!empty($has)){
return json(['code' => -1, 'data' => '', 'msg' => '该ip已经存在']);
}
// 先添加平台管理员
$data = [
'ip' => $param['ip'],
'group_id' => $group_id,
'oper' => $this->admin_id,
'create_time' => date('Y-m-d H:i:s'),
];
$add_id = $db_white_ip->insertGetId($data);
if ($add_id) {
LogRepository::write('白名单管理', '添加ip--'.$param['ip']);
// 更新 redis
$this->_update_white_list($group_id);
return json(['code' => 1, 'data' => '', 'msg' => '添加成功']);
}
} catch (\Exception $e){
return json(['code' => -2, 'data' => '', 'msg' => $e->getMessage()]);
}
}
$group_info = [];
if ($this->is_root) {
$group_info = db('groups')->where('status', 1)->column('name', 'id');
}
$this->assign([
'is_root' => $this->is_root ? 1 : 0,
'group_info' => $group_info,
]);
return $this->fetch('');
}
protected function _update_white_list($group_id)
{
// 更新 redis
$db_white_ip = db('white_ip');
$white_ip = $db_white_ip->where('group_id', $group_id)->column('ip');
$redis = new \Redis();
$redis->connect(config('cache.host'),config('cache.port'));
$redis->auth(config('cache.password'));
$redis->hSet('white_list', $group_id, json_encode($white_ip));
}
// 删除
public function del_white_ip()
{
if(request()->isAjax()){
try{
$id = input('param.id/d');
$db_white_ip = db('white_ip');
$info = $db_white_ip->where('id', $id)->find();
if (!$info) {
return json(['code' => -1, 'data' => '', 'msg' => '该ip已删除']);
}
// 只允许超管和平台管理员删除
if (!$this->is_root) {
if ($this->role_name == '平台管理员') {
// 查看是否有权限删除
$group_id = db('groups')->where('admin_id', $this->admin_id)->value('id');
if ($group_id != $info['group_id']) {
return json(['code' => -1, 'data' => '', 'msg' => '您无权限,不可删除该ip']);
}
} else {
return json(['code' => -2, 'data' => '', 'msg' => '您无权限,不可删除该ip']);
}
}
$res = $db_white_ip->where('id', $id)->delete();
if ($res) {
LogRepository::write('白名单管理', '平台id:'.$info['group_id'].',删除的ip--' . $info['ip']);
// 更新 redis
$this->_update_white_list($info['group_id']);
return json(['code' => 1, 'data' => '', 'msg' => '删除成功']);
}
} catch (\Exception $e){
return json(['code' => -1, 'data' => '', 'msg' => $e->getMessage()]);
}
return json(['code' => -1, 'data' => '', 'msg' => '删除失败']);
}
}
// 生成按钮
private function makeBtn($id)
{
$operate = '';
// if ($this->is_root) {
$operate .= ' ';
// }
//$operate .= '';
//$operate .= '';
return $operate;
}
}