RoleService.php 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142
  1. <?php
  2. // +----------------------------------------------------------------------
  3. // | LARAVEL8.0 框架 [ LARAVEL ][ RXThinkCMF ]
  4. // +----------------------------------------------------------------------
  5. // | 版权所有 2017~2021 LARAVEL研发中心
  6. // +----------------------------------------------------------------------
  7. // | 官方网站: http://www.laravel.cn
  8. // +----------------------------------------------------------------------
  9. // | Author: laravel开发员 <laravel.qq.com>
  10. // +----------------------------------------------------------------------
  11. namespace App\Services\Common;
  12. use App\Models\MenuModel;
  13. use App\Models\RoleMenuModel;
  14. use App\Models\RoleModel;
  15. use App\Models\ActionLogModel;
  16. use App\Services\BaseService;
  17. /**
  18. * 角色管理-服务类
  19. * @author laravel开发员
  20. * @since 2020/11/11
  21. * Class RoleService
  22. * @package App\Services\Common
  23. */
  24. class RoleService extends BaseService
  25. {
  26. /**
  27. * 构造函数
  28. * @author laravel开发员
  29. * @since 2020/11/11
  30. * RoleService constructor.
  31. */
  32. public function __construct()
  33. {
  34. $this->model = new RoleModel();
  35. }
  36. /**
  37. * 获取角色列表
  38. * @return array
  39. * @since 2020/11/11
  40. * @author laravel开发员
  41. */
  42. public function getRoleList()
  43. {
  44. $list = $this->model->where([
  45. ['status', '=', 1],
  46. ['mark', '=', 1],
  47. ])->orderBy("sort", "asc")
  48. ->get()
  49. ->toArray();
  50. return message("操作成功", true, $list);
  51. }
  52. /**
  53. * 获取角色权限列表
  54. * @return mixed
  55. * @since 2020/11/11
  56. * @author laravel开发员
  57. */
  58. public function getPermissionList()
  59. {
  60. // 请求参数
  61. $param = request()->all();
  62. // 角色ID
  63. $roleId = intval(getter($param, "role_id", 0));
  64. // 获取全部菜单
  65. $menuModel = new MenuModel();
  66. $menuList = $menuModel->from('menu as a')
  67. ->leftJoin('menu as b', 'b.id', '=', 'a.pid')
  68. ->leftJoin('menu as c', 'c.id', '=', 'b.pid')
  69. ->where([
  70. ['a.status', '=', 1],
  71. ['a.mark', '=', 1],
  72. ])->where(function ($query) {
  73. $query->where(['a.pid' => 0])->orWhere(function ($query) {
  74. $query->where('a.pid', '>', 0)->where(['b.status' => 1, 'b.mark' => 1]);
  75. });
  76. })->orderBy("a.sort", "asc")->select(['a.*'])->get()->toArray();
  77. if (!empty($menuList)) {
  78. $roleMenuModel = new RoleMenuModel();
  79. $roleMenuList = $roleMenuModel->where("role_id", $roleId)->get("menu_id")->toArray();
  80. $menuIdList = array_key_value($roleMenuList, "menu_id");
  81. foreach ($menuList as &$val) {
  82. if (in_array($val['id'], $menuIdList)) {
  83. $val['checked'] = true;
  84. $val['open'] = true;
  85. }
  86. }
  87. }
  88. return message(MESSAGE_OK, true, $menuList);
  89. }
  90. /**
  91. * 保存角色菜单权限数据
  92. * @return array
  93. * @since 2020/11/11
  94. * @author laravel开发员
  95. */
  96. public function savePermission()
  97. {
  98. // 请求参数
  99. $param = request()->all();
  100. // 角色ID
  101. $roleId = intval(getter($param, "role_id", 0));
  102. if (!$roleId) {
  103. return message("角色ID不能为空", false);
  104. }
  105. unset($param['role_id']);
  106. // 删除角色菜单关系数据
  107. $roleMenuModel = new RoleMenuModel();
  108. $roleMenuModel->where("role_id", $roleId)->delete();
  109. // 插入角色菜单关系数据
  110. if (is_array($param) && !empty($param)) {
  111. $list = [];
  112. foreach ($param as $val) {
  113. $data = [
  114. 'role_id' => $roleId,
  115. 'menu_id' => $val,
  116. ];
  117. $list[] = $data;
  118. }
  119. }
  120. $roleMenuModel->insert($list);
  121. return message();
  122. }
  123. /**
  124. * 删除七天之前标记软删除的数据
  125. */
  126. public function delete()
  127. {
  128. // 设置日志标题
  129. ActionLogModel::setRecord(session('userId'), ['type' => 1, 'title' => "删除角色信息", 'content' => json_encode(request()->post(), 256), 'module' => 'admin']);
  130. ActionLogModel::record();
  131. $this->model->where('mark', 0)->where('update_time', '<=', time() - 7 * 86400)->delete();
  132. return parent::delete();
  133. }
  134. }