User.php 9.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300
  1. <?php
  2. namespace app\admin\controller\auth;
  3. use app\common\controller\AdminController;
  4. use app\http\IResponse;
  5. class User extends AdminController
  6. {
  7. /**
  8. * 登录个人信息
  9. *
  10. * @author 许祖兴 < zuxing.xu@lettered.cn>
  11. * @date 2020/3/16 14:39
  12. *
  13. * @return \think\response\Json
  14. * @throws \Lettered\Support\Exceptions\FailedException
  15. * @throws \think\db\exception\DataNotFoundException
  16. * @throws \think\db\exception\ModelNotFoundException
  17. * @throws \think\exception\DbException
  18. */
  19. public function person()
  20. {
  21. // 接受参数
  22. $params = $this->request->param();
  23. // 获取用户信息
  24. $user = $this->auth->user();
  25. // 修改密码
  26. if ($this->request->isPut() && isset($params['password']) && $params['password'] != ''){
  27. // 检查原始密码
  28. if (!password_verify($params['password'], $user->password)){
  29. return $this->ApiJson(-1,"原始密码不正确");
  30. }
  31. // 查改
  32. $user = model('Users')->findBy($user->id);
  33. // 更新
  34. $user->allowField(true)->updateBy($user->id, ['password' => $params['npassword']]);
  35. return $this->JsonSuccess([],"密码修改成,请重新登录!");
  36. }
  37. // 非超级管理员
  38. if ($user->id != 1){
  39. // 获取用户角色
  40. $roles = [];
  41. // 角色的规则
  42. $permissions_r = [];
  43. foreach ( $this->enforcer::GetRolesForUser('user_id_' . $user->id) as $role){
  44. $roles[] = model('Roles')->getBy(['name' => $role]);
  45. // 找啊找啊找朋友
  46. foreach ( $this->enforcer::GetPermissionsForUser($role) as $permissions_u){
  47. $permissions_r[] = model('Permissions')->field('sort,status,created_at,updated_at,deleted_at',true)
  48. ->where(['url' => $permissions_u[1],'policy' => $permissions_u[2]])->find();
  49. }
  50. }
  51. // 角色菜单权限
  52. $permission_idx = model('PermissionsRole')->where(['role_id' => $roles[0]['id']])->value('permission_idx');
  53. $permissions_m = [];
  54. foreach (str2arr($permission_idx) as $idx){
  55. $permissions_m[] = model('Permissions')->field('sort,status,created_at,updated_at,deleted_at',true)
  56. ->find($idx);
  57. }
  58. $permissions = array_merge($permissions_r, $permissions_m);
  59. }else{ // 超级用户
  60. $permissions = model('Permissions')
  61. ->field('sort,status,created_at,updated_at,deleted_at',true)
  62. ->select()->toArray();
  63. $roles = ['super'];
  64. }
  65. // 服务端处理树形
  66. //$user->permissions = arr2tree($permissions,'id','parent_id','subMenus');
  67. // 直接返回客户端处理树形
  68. $user->permissions = $permissions;
  69. // 用户角色
  70. $user->roles = $roles;
  71. return IResponse::success($user);
  72. }
  73. /**
  74. * 获取用户的角色
  75. *
  76. * @author 许祖兴 < zuxing.xu@lettered.cn>
  77. * @date 2020/3/16 14:44
  78. *
  79. * @param $id
  80. * @return \think\response\Json
  81. */
  82. public function roles($id)
  83. {
  84. // 获取用户信息
  85. $user = model('Users')->getBy($id);
  86. if ($user) {
  87. $roles = [];
  88. foreach ( $this->enforcer::GetRolesForUser('user_id_' . $user->id) as $role){
  89. $roles[] = model('Roles')->getBy(['name' => $role]);
  90. }
  91. return IResponse::success($roles);
  92. }
  93. return IResponse::failure('用户不存在!');
  94. }
  95. /**
  96. * 用户列表
  97. *
  98. * @author 许祖兴 < zuxing.xu@lettered.cn>
  99. * @date 2020/3/16 14:39
  100. *
  101. * @return \think\response\Json
  102. * @throws \think\exception\DbException
  103. */
  104. public function index()
  105. {
  106. $where = [];
  107. //组合搜索
  108. !empty(input('keyword')) && $where[]
  109. = ['email|username', 'like', '%' . input('keyword') . '%'];
  110. $users = model('Users');
  111. if (input('status') == 'trashed'){
  112. // ->withTrashed() 包括软删除的数据;
  113. // ->onlyTrashed() 只查询删除
  114. $users = $users->onlyTrashed();
  115. }else {
  116. $users = $users->withTrashed();
  117. (!empty(input('status')) || input('status') == '0' ) &&
  118. $where[] = ['status', 'eq', input('status')];
  119. }
  120. return IResponse::paginate($users->where($where)
  121. ->paginate(input('limit'),false));
  122. }
  123. /**
  124. * 新增角色
  125. *
  126. * @author 许祖兴 < zuxing.xu@lettered.cn>
  127. * @date 2020/3/16 14:24
  128. *
  129. */
  130. public function save()
  131. {
  132. // 接收数据
  133. $params = $this->request->param();
  134. // 数据校验
  135. $valid = $this->validate($params,[
  136. 'email|账号' => 'require|email|unique:Users',
  137. 'username|用户名' => 'require|alpha|unique:Users',
  138. 'password|密码' => 'require'
  139. ],[
  140. 'email.unique' => '账号已存在!',
  141. 'name.alpha' => '用户名名称仅支持英文!',
  142. 'name.unique' => '用户名名称已存在!'
  143. ]);
  144. (true !== $valid) && IResponse::failure($valid);
  145. // 保存数据
  146. $userId = model('Users')->storeBy($params);
  147. // 获取角色信息
  148. $role = model('Roles')->getBy($params['roles']);
  149. // 写入用户权限
  150. $this->enforcer::AddRoleForUser('user_id_' . $userId,$role->name);
  151. return $userId ? IResponse::success([],'新增用户成功'):
  152. IResponse::failure('新增用户异常');
  153. }
  154. /**
  155. * 更新数据
  156. *
  157. * @author 许祖兴 < zuxing.xu@lettered.cn>
  158. * @date 2020/3/16 14:24
  159. *
  160. * @param $id
  161. * @return \think\response\Json
  162. */
  163. public function update($id)
  164. {
  165. // 接收数据
  166. $params = $this->request->param();
  167. // 查询用户
  168. $user = model('Users')->findBy($id);
  169. // 是否更改状态操作
  170. if (isset($params['status']) && $params['status'] != '') {
  171. $valid = $this->validate($params, [
  172. 'status|配置状态' => 'require|integer'
  173. ]);
  174. if ($params['id'] == $user->id && $params['status'] == 0)
  175. return IResponse::failure("连自己够搞,不太好吧");
  176. }else {
  177. // 数据校验
  178. $valid = $this->validate($params, [
  179. 'email|账号' => 'require|email',
  180. 'username|用户名' => 'require|alpha'
  181. ], [
  182. 'name.alpha' => '用户名称仅支持英文!',
  183. ]);
  184. }
  185. // 错误返回
  186. (true !== $valid) && IResponse::failure($valid);
  187. // 是否更改状态操作
  188. if (!isset($params['status'])) {
  189. // 密码处理
  190. if (isset($params['password']) && $params['password'] == '') {
  191. // 密码空则不变动
  192. unset($params['password']);
  193. }
  194. // 原先的角色
  195. $user_role = $this->enforcer::GetRolesForUser('user_id_' . $user->id);
  196. // 获取角色信息
  197. $role = model('Roles')->getBy($params['roles']);
  198. // 没有原先直接新增
  199. if (!empty($user_role)) {
  200. // 是否变更操作
  201. if ($user_role[0] != $role->name) {
  202. // 删除原先
  203. $this->enforcer::DeleteRoleForUser('user_id_' . $user->id, $user_role[0]);
  204. }
  205. }
  206. // 写入变更用户角色
  207. $this->enforcer::AddRoleForUser('user_id_' . $user->id, $role->name);
  208. }
  209. // 更新用户信息
  210. $user->updateBy($id, $params);
  211. return IResponse::success('更新用户信息成功');
  212. }
  213. /**
  214. * 删除角色
  215. *
  216. * @author 许祖兴 < zuxing.xu@lettered.cn>
  217. * @date 2020/3/16 14:22
  218. *
  219. * @param $id
  220. * @return \think\response\Json
  221. */
  222. public function delete($id)
  223. {
  224. model('Users')->deleteBy($id);
  225. return IResponse::success([],'删除用户成功');
  226. }
  227. /**
  228. * 用户批量操作
  229. *
  230. * @author 许祖兴 < zuxing.xu@lettered.cn>
  231. * @date 2020/3/23 11:38
  232. *
  233. * @return mixed
  234. */
  235. public function plectron(){
  236. // 收参数
  237. $params = $this->request->param();
  238. foreach (str2arr($params['ids']) as $id){
  239. $user = model('Users')->getBy($id);
  240. if ($this->request->isDelete()){
  241. $user->deleteBy($id);
  242. return IResponse::success([],'删除用户成功');
  243. }
  244. $user->allowField(true)->updateBy($id, $params);
  245. }
  246. return IResponse::success([],'操作成功');
  247. }
  248. /**
  249. * 恢复删除用户
  250. *
  251. * @author 许祖兴 < zuxing.xu@lettered.cn>
  252. * @date 2020/3/23 13:05
  253. *
  254. * @param $id
  255. * @return mixed
  256. * @throws \think\db\exception\DataNotFoundException
  257. * @throws \think\db\exception\ModelNotFoundException
  258. * @throws \think\exception\DbException
  259. */
  260. public function restore($id)
  261. {
  262. // 查询数据
  263. $user = model('Users')->onlyTrashed()->find($id);
  264. if (!$user){
  265. return IResponse::failure('用户不存在!');
  266. }
  267. // 恢复
  268. return $user->restore() ? IResponse::success('恢复用户成功!')
  269. : IResponse::failure('恢复用户失败!');
  270. }
  271. }