model = new \app\agent\model\auth\User(); } /** * 登录个人信息 * * @author 许祖兴 < zuxing.xu@lettered.cn> * @date 2020/3/16 14:39 * * @return \think\response\Json * @throws \Lettered\Support\Exceptions\FailedException * @throws \think\db\exception\DataNotFoundException * @throws \think\db\exception\ModelNotFoundException * @throws \think\exception\DbException */ public function person() { // 接受参数 $params = $this->request->param(); // 获取用户信息 $user = $this->auth->user(); // 修改密码 if ($this->request->isPut() && isset($params['password']) && $params['password'] != ''){ // 检查原始密码 if (!password_verify($params['password'], $user->password)){ return $this->ApiJson(-1,"原始密码不正确"); } // 查改 $user = $this->model->findBy($user->id); // 更新 $user->allowField(true)->updateBy($user->id, ['password' => $params['npassword']]); return $this->JsonSuccess([],"密码修改成,请重新登录!"); } // 非超级管理员 if ($user->id != 1){ $Permission = new \app\agent\model\auth\Permission(); $PermissionRole = new PermissionRole(); $Role = new \app\agent\model\auth\Role(); // 获取用户角色 $roles = []; // 角色的规则 $permissions_r = []; foreach ( $this->enforcer::GetRolesForUser('user_id_' . $user->id) as $role){ $roles[] = $Role->getBy(['name' => $role]); // 找啊找啊找朋友 foreach ( $this->enforcer::GetPermissionsForUser($role) as $permissions_u){ $permissions_r[] = $Permission->field('sort,status,created_at,updated_at,deleted_at',true) ->where(['url' => $permissions_u[1],'policy' => $permissions_u[2]])->find(); } } // 角色菜单权限 $permission_idx = $PermissionRole->where(['role_id' => $roles[0]['id']])->value('permission_idx'); $permissions_m = []; foreach (str2arr($permission_idx) as $idx){ $permissions_m[] = $Permission->field('sort,status,created_at,updated_at,deleted_at',true) ->find($idx); } $permissions = array_merge($permissions_r, $permissions_m); }else{ // 超级用户 $Permission = new \app\agent\model\auth\Permission(); $permissions = $Permission ->field('sort,status,created_at,updated_at,deleted_at',true) ->select()->toArray(); $roles = ['super']; } // 直接返回客户端处理树形 $user->permissions = $permissions; // 用户角色 $user->roles = $roles; return IResponse::success($user); } /** * 获取用户的角色 * * @author 许祖兴 < zuxing.xu@lettered.cn> * @date 2020/3/16 14:44 * * @param $id * @return \think\response\Json */ public function roles($id) { // 获取用户信息 $user = $this->model->getBy($id); if ($user) { $Role = new \app\agent\model\auth\Role(); $roles = []; foreach ( $this->enforcer::GetRolesForUser('user_id_' . $user->id) as $role){ $roles[] = $Role->getBy(['name' => $role]); } return IResponse::success($roles); } return IResponse::failure('用户不存在!'); } /** * 用户列表 * * @author 许祖兴 < zuxing.xu@lettered.cn> * @date 2020/3/16 14:39 * * @return \think\response\Json * @throws \think\exception\DbException */ public function index() { $where = []; !empty($this->auth->user()['user_id']) && $where[] = ['user_id', '=', $this->auth->user()['user_id']]; //组合搜索 !empty(input('keyword')) && $where[] = ['email|username', 'like', '%' . input('keyword') . '%']; $users = $this->model; if (input('status') == 'trashed'){ // ->withTrashed() 包括软删除的数据; // ->onlyTrashed() 只查询删除 $users = $users->onlyTrashed(); }else { $users = $users->withTrashed(); (!empty(input('status')) || input('status') == '0' ) && $where[] = ['status', 'eq', input('status')]; } return IResponse::paginate($users->where($where) ->paginate(input('limit'),false)); } /** * 新增角色 * * @author 许祖兴 < zuxing.xu@lettered.cn> * @date 2020/3/16 14:24 * */ public function save() { // 接收数据 $params = $this->request->param(); // 数据校验 $valid = $this->validate($params,[ 'email|账号' => 'require|email|unique:\\app\\agent\\model\\auth\\User', 'username|用户名' => 'require|alpha|unique:\\app\\agent\\model\\auth\\User', 'password|密码' => 'require' ],[ 'email.unique' => '账号已存在!', 'name.alpha' => '用户名名称仅支持英文!', 'name.unique' => '用户名名称已存在!' ]); (true !== $valid) && IResponse::failure($valid); $auth = $this->auth->user(); $params['area_id'] = $auth['area_id']; $params['user_id'] = $auth['user_id']; $params['password'] = password_hash(input('password/s'), PASSWORD_BCRYPT); $result = false; $this->model->startTrans(); try { // 保存数据 $result = $this->model->storeBy($params); // 获取角色信息 $Role = new \app\agent\model\auth\Role(); $role = $Role->getBy($params['roles']); // 写入用户权限 $this->enforcer::AddRoleForUser('user_id_' . $result,$role->name); $this->model->commit(); } catch(Exception $e) { $this->model->rollback(); } if ($result) { IResponse::success([],'新增用户成功'); } IResponse::failure('新增用户异常'); } /** * 更新数据 * * @author 许祖兴 < zuxing.xu@lettered.cn> * @date 2020/3/16 14:24 * * @param $id * @return \think\response\Json */ public function update($id) { // 接收数据 $params = $this->request->param(); // 查询用户 $user = $this->model->findBy($id); // 是否更改状态操作 if (isset($params['status']) && $params['status'] != '') { $valid = $this->validate($params, [ 'status|配置状态' => 'require|integer' ]); if ($params['id'] == $user->id && $params['status'] == 0) return IResponse::failure("连自己够搞,不太好吧"); }else { // 数据校验 $valid = $this->validate($params, [ 'email|账号' => 'require|email', 'username|用户名' => 'require|alpha' ], [ 'name.alpha' => '用户名称仅支持英文!', ]); } // 错误返回 (true !== $valid) && IResponse::failure($valid); // 是否更改状态操作 if (!isset($params['status'])) { // 密码处理 if (isset($params['password']) && $params['password'] == '') { // 密码空则不变动 unset($params['password']); } else { $params['password'] = password_hash(input('password/s'), PASSWORD_BCRYPT); } $Role = new \app\agent\model\auth\Role(); // 原先的角色 $user_role = $this->enforcer::GetRolesForUser('user_id_' . $user->id); // 获取角色信息 $role = $Role->getBy($params['roles']); // 没有原先直接新增 if (!empty($user_role)) { // 是否变更操作 if ($user_role[0] != $role->name) { // 删除原先 $this->enforcer::DeleteRoleForUser('user_id_' . $user->id, $user_role[0]); } } // 写入变更用户角色 $this->enforcer::AddRoleForUser('user_id_' . $user->id, $role->name); } // 更新用户信息 $user->updateBy($id, $params); return IResponse::success('更新用户信息成功'); } /** * 删除角色 * * @author 许祖兴 < zuxing.xu@lettered.cn> * @date 2020/3/16 14:22 * * @param $id * @return \think\response\Json */ public function delete($id) { $this->model->deleteBy($id); return IResponse::success([],'删除用户成功'); } /** * 用户批量操作 * * @author 许祖兴 < zuxing.xu@lettered.cn> * @date 2020/3/23 11:38 * * @return mixed */ public function plectron(){ // 收参数 $params = $this->request->param(); foreach (str2arr($params['ids']) as $id){ $user = $this->model->getBy($id); if ($this->request->isDelete()){ $user->deleteBy($id); return IResponse::success([],'删除用户成功'); } $user->allowField(true)->updateBy($id, $params); } return IResponse::success([],'操作成功'); } /** * 恢复删除用户 * * @author 许祖兴 < zuxing.xu@lettered.cn> * @date 2020/3/23 13:05 * * @param $id * @return mixed * @throws \think\db\exception\DataNotFoundException * @throws \think\db\exception\ModelNotFoundException * @throws \think\exception\DbException */ public function restore($id) { // 查询数据 $user = $this->model->onlyTrashed()->find($id); if (!$user){ return IResponse::failure('用户不存在!'); } // 恢复 return $user->restore() ? IResponse::success('恢复用户成功!') : IResponse::failure('恢复用户失败!'); } }