__('Addtabs'), 'dialog' => __('Dialog'), 'ajax' => __('Ajax'), 'blank' => __('Blank')]; } public function setPyAttr($value, $data) { if (isset($data['title']) && $data['title']) { return self::$pinyin->abbr(__($data['title'])); } return ''; } public function setPinyinAttr($value, $data) { if (isset($data['title']) && $data['title']) { return self::$pinyin->permalink(__($data['title']), ''); } return ''; } /** * 获取会员组别规则列表 * @return array|bool|\PDOStatement|string|\think\Collection */ public function getRuleList($admin_id,$where=[],$full = false) { $group_ids = AuthGroupAccess::where("uid",$admin_id)->column("group_id"); if(!$group_ids && !$full) return []; $groups = AuthGroup::where('id', 'in', $group_ids)->select(); if (!$groups && !$full ) { return []; } $rules = []; foreach ($groups as $group){ $rules = array_merge($rules, explode(',', $group->rules)); } //包含*全查,否则按值查 if ($full || in_array('*', $rules)) { return AuthRule::where($where)->where('status', 'normal')->order('weigh desc,id desc')->select(); } return AuthRule::where($where)->where('status', 'normal')->where('id', 'in', $rules)->order('weigh desc,id desc')->select(); } //得到菜单列表 public function getMenulist($admin_id,$where= ["ismenu"=>1],$is_tree=false,$full = false,$id_name='id',$pid_name='pid',$child_name='children') { $menu = $this->getRuleList($admin_id,$where,$full); if(!$is_tree){ return $menu; } // 生成菜单的树状结构 id pid ,pid=0为顶级菜单 $menulist = []; foreach ($menu as $k => $v) { $v = $v->toArray(); $v[$id_name] = $v['id']; $v[$pid_name] = $v['pid']; $menulist[$v[$id_name]] = $v; } $tree = []; foreach ($menulist as $k => $v) { if (isset($menulist[$v[$pid_name]])) { $menulist[$v[$pid_name]][$child_name][] = &$menulist[$v[$id_name]]; } else { $tree[] = &$menulist[$v[$id_name]]; } } return $tree; } public function authCheck($admin_id,$auth_name) { $group_ids = AuthGroupAccess::where("uid",$admin_id)->column("group_id"); if(!$group_ids) return null; $groups = AuthGroup::where('id', 'in', $group_ids)->select(); if (!$groups) { return null; } $rules = []; foreach ($groups as $group){ $rules = array_merge($rules, explode(',', $group->rules)); } //包含*全查,否则按值查 if (in_array('*', $rules)) { return AuthRule::where('status', 'normal')->where( 'name|rule_name',$auth_name)->find() ; } return AuthRule::where('status', 'normal')->where( 'name|rule_name',$auth_name)->where('id', 'in', $rules)->find(); } public function getAllRules($admin_id) { $group_ids = AuthGroupAccess::where("uid",$admin_id)->column("group_id"); if(!$group_ids) return null; $groups = AuthGroup::where('id', 'in', $group_ids)->select(); if (!$groups) { return null; } $rules = []; foreach ($groups as $group){ $rules = array_merge($rules, explode(',', $group->rules)); } //包含*全查,否则按值查 if (in_array('*', $rules)) { return AuthRule::where('status', 'normal')->field("name,rule_name,ismenu")->select() ; } return AuthRule::where('status', 'normal')->where('id', 'in', $rules)->field("name,rule_name,ismenu")->select(); } /** 通用新增(后台api版本) * @param $params * @param $trans * @return $this * @throws \Exception */ public function add($params,$trans=false){ if (empty($params)) { throw new \Exception(__('Parameter %s can not be empty', '')); } // if ($this->dataLimit && $this->dataLimitFieldAutoFill) { // $params[$this->dataLimitField] = $this->auth->id; // } //判断逻辑 if($trans){ self::beginTrans(); } $res = true; try{ //是否采用模型验证 if ($this->modelValidate) { $name = str_replace("\\model\\", "\\validate\\", get_class($this)); $validate = is_bool($this->modelValidate) ? ($this->modelSceneValidate ? $name . '.add' : $name) : $this->modelValidate; $this->validateFailException()->validate($validate); } if (!$params['ismenu'] && !$params['pid']) { throw new \Exception(__('The non-menu rule must have parent')); } $result = $this->allowField(true)->save($params); if($trans){ self::commitTrans(); } }catch (\Exception $e){ if($trans){ self::rollbackTrans(); } throw new \Exception($e->getMessage().$e->getFile().$e->getLine()); } return $this; } /** 通用编辑(后台api版本) * @param $params * @param $trans * @return $this * @throws \Exception */ public function edit($id,$params,$trans=false){ $row = $this->get($id); if (!$row) { throw new \Exception(__('No Results were found')); } // $adminIds = $this->getDataLimitAdminIds(); // if (is_array($adminIds) && !in_array($row[$this->dataLimitField], $adminIds)) { // throw new \Exception(__('You have no permission')); // } if (!$params['ismenu'] && !$params['pid']) { throw new \Exception(__('The non-menu rule must have parent')); } if ($params['pid'] == $row['id']) { throw new \Exception(__('Can not change the parent to self')); } if ($params['pid'] != $row['pid']) { $childrenIds = Tree::instance()->init(collection(\app\admin\model\api\AuthRule::select())->toArray())->getChildrenIds($row['id']); if (in_array($params['pid'], $childrenIds)) { throw new \Exception(__('Can not change the parent to child')); } } //这里需要针对name做唯一验证 $name = self::where("id","<>", $id)->where("name", $params['name'])->find(); if ($name) { throw new \Exception(__('The name already exist')); } if ($params['rule_name'] && $params['rule_name'] != $row['rule_name']) { $rule_name = self::where("id","<>", $id)->where("rule_name", $params['rule_name'])->find(); if ($rule_name) { throw new \Exception(__('The rule_name already exist')); } } if (empty($params)) { throw new \Exception(__('Parameter %s can not be empty', '')); } //判断逻辑 if($trans){ self::beginTrans(); } $res = true; try{ //是否采用模型验证 if ($this->modelValidate) { $name = str_replace("\\model\\", "\\validate\\", get_class($this)); $validate = is_bool($this->modelValidate) ? ($this->modelSceneValidate ? $name . '.edit' : $name) : $this->modelValidate; $row->validateFailException()->validate($validate); } $result = $row->allowField(true)->save($params); if($trans){ self::commitTrans(); } }catch (\Exception $e){ if($trans){ self::rollbackTrans(); } throw new \Exception($e->getMessage().$e->getFile().$e->getLine()); } return $row; } /** 通用详情(后台api版本) * @param $params * @param $trans * @return $this * @throws \Exception */ public function detail($id,$show_field=[],$except_field=[]){ $row = $this->get($id); if (!$row) { throw new \Exception(__('No Results were found')); } if($show_field){ $row->visible($show_field); } if($except_field){ $row->hidden($except_field); } return $row; } /** 通用删除(后台api版本) * @param $params * @param $trans * @return $this * @throws \Exception */ public function del($ids = null,$trans=false){ if (empty($ids)) { throw new \Exception(__('Parameter %s can not be empty', 'ids')); } //判断逻辑 // $pk = $this->getPk(); // $adminIds = $this->getDataLimitAdminIds(); // if (is_array($adminIds)) { // $this->where($this->dataLimitField, 'in', $adminIds); // } if($trans){ self::beginTrans(); } $res = true; try{ $delIds = []; foreach (explode(',', $ids) as $k => $v) { $delIds = array_merge($delIds, Tree::instance()->getChildrenIds($v, true)); } $delIds = array_unique($delIds); $count = $this->where('id', 'in', $delIds)->delete(); if ($count) { Cache::rm('__menu__'); } // foreach ($list as $item) { // $count += $item->delete(); // } if($trans){ self::commitTrans(); } }catch (\Exception $e){ if($trans){ self::rollbackTrans(); } throw new \Exception($e->getMessage().$e->getFile().$e->getLine()); } return $count; } }