AuthService.php 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157
  1. <?php
  2. /**
  3. * Created by PhpStorm.
  4. * Name: 芸众商城系统
  5. * Author: 广州市芸众信息科技有限公司
  6. * Profile: 广州市芸众信息科技有限公司位于国际商贸中心的广州,专注于移动电子商务生态系统打造,拥有芸众社交电商系统、区块链数字资产管理系统、供应链管理系统、电子合同等产品/服务。官网 :www.yunzmall.com www.yunzshop.com
  7. * Date: 2021/9/22
  8. * Time: 13:37
  9. */
  10. namespace business\common\services;
  11. use business\admin\menu\BusinessMenu;
  12. use business\common\models\Department;
  13. use business\common\models\Premission;
  14. use business\common\models\Staff;
  15. use Illuminate\Support\Facades\DB;
  16. use Exception;
  17. class AuthService
  18. {
  19. /*
  20. * 设置权限
  21. */
  22. public static function setAuth($auth, $department_id = 0, $is_leader = 0, $staff_id = 0, $right_type = 0)
  23. {
  24. $where = [
  25. 'business_id' => SettingService::getBusinessId(),
  26. 'uniacid' => \YunShop::app()->uniacid,
  27. ];
  28. if ($department_id) {
  29. if (!Department::business()->find($department_id)) {
  30. return self::returnArr(0, '部门不存在');
  31. }
  32. $where['department_id'] = $department_id;
  33. $where['type'] = $is_leader ? 2 : 1;
  34. } elseif ($staff_id) {
  35. if (!$staff = Staff::business()->find($staff_id)) {
  36. return self::returnArr(0, '员工不存在');
  37. }
  38. $where['staff_id'] = $staff_id;
  39. $where['type'] = 3;
  40. } else {
  41. return self::returnArr(0, '权限类型异常');
  42. }
  43. DB::beginTransaction();
  44. $insert_data = [];
  45. $time = time();
  46. try {
  47. foreach ($auth as $k => $v) {
  48. foreach ($v as $kk => $vv) {
  49. $insert_data[] = array_merge($where, [
  50. 'module' => $k,
  51. 'route' => $vv,
  52. 'created_at' => $time,
  53. 'updated_at' => $time
  54. ]);
  55. }
  56. Premission::where($where)->delete();
  57. }
  58. if ($insert_data) {
  59. Premission::insert($insert_data);
  60. }
  61. if (isset($staff)) {
  62. $staff->right_type = in_array($right_type, [0, 1]) ? $right_type : 0;
  63. $staff->save();
  64. }
  65. } catch (Exception $e) {
  66. DB::rollBack();
  67. return self::returnArr(0, $e->getMessage());
  68. }
  69. DB::commit();
  70. return self::returnArr(1, '成功');
  71. }
  72. /*
  73. * 获取权限列表
  74. */
  75. public static function getAuthList($department_id = 0, $is_leader = 0, $staff_id = 0)
  76. {
  77. $menu = (new BusinessMenu())->getMenu();
  78. $menu = $menu['all_route'];
  79. if ($department_id) {
  80. if (!Department::business()->find($department_id)) {
  81. return self::returnArr(0, '部门不存在');
  82. }
  83. $where[] = ['department_id', $department_id];
  84. $where[] = ['type', $is_leader ? 2 : 1];
  85. } elseif ($staff_id) {
  86. if (!Staff::business()->find($staff_id)) {
  87. return self::returnArr(0, '员工不存在');
  88. }
  89. $where[] = ['staff_id', $staff_id];
  90. $where[] = ['type', 3];
  91. } else {
  92. return self::returnArr(0, '权限类型异常');
  93. }
  94. $right_arr = Premission::business()->where($where)->get();
  95. $return_data = [];
  96. foreach ($menu as $k => $v) {
  97. $return_data[$k] = self::foreachAuthList($v, $right_arr, $k);
  98. }
  99. return self::returnArr(1, '成功', $return_data);
  100. }
  101. /*
  102. * 循环组装权限列表数据
  103. */
  104. private static function foreachAuthList(&$menu, &$right_arr, $module)
  105. {
  106. foreach ($menu as $k => $v) {
  107. if (!$v['premit']) {
  108. unset($menu[$k]);
  109. continue;
  110. }
  111. $menu[$k] = [
  112. 'name' => $v['page_name'],
  113. 'route' => $v['route'],
  114. 'can' => $right_arr->where('route', $v['route'])->where('module', $module)->isNotEmpty() ? 1 : 0,
  115. 'child' => [],
  116. ];
  117. if ($v['child']) {
  118. $menu[$k]['can'] = 0;
  119. $menu[$k]['child'] = self::foreachAuthList($v['child'], $right_arr, $module);
  120. }
  121. }
  122. return array_values($menu);
  123. }
  124. public static function returnArr($result, $msg = '', $data = [])
  125. {
  126. return ['result' => $result, 'msg' => $msg, 'data' => $data];
  127. }
  128. }