* @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 = model('Users')->findBy($user->id); // 更新 $user->allowField(true)->updateBy($user->id, ['password' => $params['npassword']]); return $this->JsonSuccess([],"密码修改成,请重新登录!"); } // 非超级管理员 if ($user->id != 1){ // 获取用户角色 $roles = []; // 角色的规则 $permissions_r = []; foreach ( $this->enforcer::GetRolesForUser('user_id_' . $user->id) as $role){ $roles[] = model('Roles')->getBy(['name' => $role]); // 找啊找啊找朋友 foreach ( $this->enforcer::GetPermissionsForUser($role) as $permissions_u){ $permissions_r[] = model('Permissions')->field('sort,status,created_at,updated_at,deleted_at',true) ->where(['url' => $permissions_u[1],'policy' => $permissions_u[2]])->find(); } } // 角色菜单权限 $permission_idx = model('PermissionsRole')->where(['role_id' => $roles[0]['id']])->value('permission_idx'); $permissions_m = []; foreach (str2arr($permission_idx) as $idx){ $permissions_m[] = model('Permissions')->field('sort,status,created_at,updated_at,deleted_at',true) ->find($idx); } $permissions = array_merge($permissions_r, $permissions_m); }else{ // 超级用户 $permissions = model('Permissions') ->field('sort,status,created_at,updated_at,deleted_at',true) ->select()->toArray(); $roles = ['super']; } // 服务端处理树形 //$user->permissions = arr2tree($permissions,'id','parent_id','subMenus'); // 直接返回客户端处理树形 $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 = model('Users')->getBy($id); if ($user) { $roles = []; foreach ( $this->enforcer::GetRolesForUser('user_id_' . $user->id) as $role){ $roles[] = model('Roles')->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(input('keyword')) && $where[] = ['email|username', 'like', '%' . input('keyword') . '%']; $users = model('Users'); 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:Users', 'username|用户名' => 'require|alpha|unique:Users', 'password|密码' => 'require' ],[ 'email.unique' => '账号已存在!', 'name.alpha' => '用户名名称仅支持英文!', 'name.unique' => '用户名名称已存在!' ]); (true !== $valid) && IResponse::failure($valid); // 保存数据 $userId = model('Users')->storeBy($params); // 获取角色信息 $role = model('Roles')->getBy($params['roles']); // 写入用户权限 $this->enforcer::AddRoleForUser('user_id_' . $userId,$role->name); return $userId ? 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 = model('Users')->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']); } // 原先的角色 $user_role = $this->enforcer::GetRolesForUser('user_id_' . $user->id); // 获取角色信息 $role = model('Roles')->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) { model('Users')->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 = model('Users')->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 = model('Users')->onlyTrashed()->find($id); if (!$user){ return IResponse::failure('用户不存在!'); } // 恢复 return $user->restore() ? IResponse::success('恢复用户成功!') : IResponse::failure('恢复用户失败!'); } }