Group.php 6.6KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204
  1. <?php
  2. // +----------------------------------------------------------------------
  3. // | Description: 用户组
  4. // +----------------------------------------------------------------------
  5. // | Author:
  6. // +----------------------------------------------------------------------
  7. namespace app\admin\model;
  8. use app\admin\controller\ApiCommon;
  9. use app\admin\model\Common;
  10. class Group extends Common
  11. {
  12. /**
  13. * 为了数据库的整洁,同时又不影响Model和Controller的名称
  14. * 我们约定每个模块的数据表都加上相同的前缀,比如CRM模块用crm作为数据表前缀
  15. */
  16. protected $name = 'admin_group';
  17. /**
  18. * [getDataList 获取列表]
  19. * @param tree 1 属性
  20. * @param rules 1 二维数组
  21. * @param pid 分类:0客户自定义角色,1系统默认管理角色,2客户管理角色,3人力资源管理角色(原客户),4财务管理角色(原客户),5项目管理角色,6办公管理角色,7人力资源管理角色,8财务管理角色,9项目管理员角色
  22. * @param 备注:原自定义角色0,人事管理角色3,财务管理角色4,划分至新客户管理角色中
  23. * @param rule:types 0系统设置1工作台2客户管理3项目管理4人力资源5财务管理6商业智能(客戶)
  24. * @return [array]
  25. */
  26. public function getDataList($param)
  27. {
  28. $ruleModel = new \app\admin\model\Rule();
  29. $map = [];
  30. if ($param['tree'] == 1) {
  31. $list = $this->getTypeList();
  32. foreach ($list as $k=>$v) {
  33. $where = [];
  34. $where = $this->getNewGroupPid($v['pid']);
  35. $groupList = db('admin_group')->where($where)->select() ? : [];
  36. $list[$k]['list'] = $groupList ? : [];
  37. }
  38. } else {
  39. $where = [];
  40. if (isset($param['type'])) {
  41. $where['pid'] = $param['pid'];
  42. $where['type'] = $param['type'];
  43. } else {
  44. $where = $this->getNewGroupPid($param['pid']);
  45. }
  46. $list = db('admin_group')->where($where)->select() ? : [];
  47. if ($param['rules'] == 1) {
  48. //角色权限分类关系
  49. $ruleTypes = $ruleModel->groupsToRules($param['pid']);
  50. if ($ruleTypes) {
  51. foreach ($list as $key => $val) {
  52. $dataRules = [];
  53. $biRules = [];
  54. $rules = stringToArray($val['rules']) ? : [];
  55. foreach ($rules as $k1=>$v1) {
  56. $ruleInfo = [];
  57. $ruleInfo = db('admin_rule')->where(['id' => $v1])->find();
  58. if ($ruleInfo['types'] == $ruleTypes[0]) {
  59. $dataRules[] = $v1;
  60. } elseif ($ruleInfo['types'] == $ruleTypes[1]) {
  61. $biRules[] = $v1;
  62. }
  63. }
  64. $list[$key]['rules'] = [];
  65. $list[$key]['rules']['data'] = $dataRules ? : [];
  66. $list[$key]['rules']['bi'] = $biRules ? : [];
  67. if ($val['pid'] == 1 || $val['pid'] == 5 || $val['pid'] == 6 || $val['pid'] == 9) {
  68. $list[$key]['type'] = 0;
  69. }
  70. }
  71. }
  72. }
  73. }
  74. return $list ? : [];
  75. }
  76. //新建角色
  77. public function createData($param)
  78. {
  79. unset($param['types']);
  80. if ($param['pid'] == 5 && $param['type'] == 'work') {
  81. //项目模块下角色
  82. $param['type'] = 0;
  83. }
  84. $userInfo=new ApiCommon();
  85. $user_id=$userInfo->userInfo;
  86. $flag = $this->insertGetId($param);
  87. if ($flag) {
  88. return $flag;
  89. } else {
  90. $this->error = '操作失败';
  91. return false;
  92. }
  93. }
  94. //编辑角色
  95. public function updateDataById($param,$group_id)
  96. {
  97. $dataInfo = $this->get($group_id);
  98. if(!$dataInfo){
  99. $this->error = '该角色不存在或已删除';
  100. return false;
  101. }
  102. unset($param['types']);
  103. # 处理编辑时,前端可能不传父id的问题(admin_rule表level为1的主键)
  104. if (!empty($param['rules'])) {
  105. $rulesParam = stringToArray($param['rules']);
  106. $rulesList = db('admin_rule')->field(['id', 'level', 'pid'])->whereIn('id', $rulesParam)->select();
  107. foreach ($rulesList AS $key => $value) {
  108. if (!empty($value['level']) && $value['level'] == 2) $rulesParam[] = $value['pid'];
  109. if (!empty($value['level']) && $value['level'] == 3) {
  110. $rulesParam[] = $value['pid'];
  111. $rulesParam[] = db('admin_rule')->where('id', $value['pid'])->value('pid');
  112. }
  113. }
  114. $param['rules'] = arrayToString(array_unique($rulesParam));
  115. }
  116. if($param['title']){
  117. unset($param['rules']);
  118. }
  119. $flag = $this->where('id = '.$group_id)->update($param);
  120. if ($flag) {
  121. $user=new ApiCommon();
  122. $user_id=$user->userInfo;
  123. SystemActionLog($user_id['id'], 'admin_group','role', $group_id, 'update', $dataInfo['title'], '', '','编辑了:'.$dataInfo['title']);
  124. return true;
  125. } else {
  126. $this->error = '操作失败';
  127. return false;
  128. }
  129. }
  130. //删除角色
  131. public function delGroupById($group_id = '')
  132. {
  133. $dataInfo = $this->get($group_id);
  134. if(!$dataInfo){
  135. $this->error = '该角色不存在或已删除';
  136. return false;
  137. }
  138. if ($dataInfo['types']) {
  139. $this->error = '系统角色不能删除';
  140. return false;
  141. }
  142. $flag = $this->where('id = '.$group_id)->delete();
  143. if ($flag) {
  144. # 系统操作记录
  145. $user=new ApiCommon();
  146. $user_id=$user->userInfo;
  147. SystemActionLog($user_id['id'], 'admin_group','role', $group_id, 'update', $dataInfo['title'], '', '','删除了角色:'.$dataInfo['title']);
  148. return true;
  149. } else {
  150. $this->error = '删除失败';
  151. return false;
  152. }
  153. }
  154. /**
  155. * [getTypeList 获取分类列表]
  156. * @param 备注:原自定义角色0,人事管理角色3,财务管理角色4,划分至客户管理角色中
  157. * @return [array]
  158. */
  159. public function getTypeList()
  160. {
  161. $list = ['0' => ['name' => '系统管理角色','pid' => 1],'1' => ['name' => '办公管理角色','pid' => 6],'2' => ['name' => '客户管理角色','pid' => 2],'3' => ['name' => '项目管理角色','pid' => '9']];
  162. return $list ? : [];
  163. }
  164. /**
  165. * [getNewGroupPid 兼容9.0.5版本group pid对应关系]
  166. * @param 备注:原自定义角色0,人事管理角色3,财务管理角色4,划分至客户管理角色中
  167. * @return [array]
  168. */
  169. protected function getNewGroupPid($pid)
  170. {
  171. switch ($pid) {
  172. case '1' :
  173. $where['pid'] = 1;
  174. $where['types'] = ['not in',['7']];
  175. break;
  176. case '2' :
  177. $where = function($query) {
  178. $query->where(['pid' => ['in',['0','2','3','4']]])
  179. ->whereOr('type != 0 AND pid = 5');
  180. };
  181. break;
  182. case '9' :
  183. $where = function($query) {
  184. $query->where(['pid' => 9])
  185. ->whereOr('types = 7 AND pid = 1');
  186. };
  187. break;
  188. default :
  189. $where['pid'] = $pid;
  190. break;
  191. }
  192. return $where ? : [];
  193. }
  194. }