为了更新方便,没有直接修改原文件,直接继承扩展了原来的Auth类,放在同一个命名空间下,类名和文件名可以自己定义。如果有错漏或者优化方案,敬请指正提出。
namespace appadminlibrary;use appadminmodelAdmin;use appadminmodelAuthGroup;use fastTree;class AuthExtra extends Auth{ /** * 取出指定管理员所拥有权限的子管理员 * @param boolean $withself 是否包含自身 * @param null $uid 指定管理员 * @return array * @throws thinkdbexceptionDataNotFoundException * @throws thinkdbexceptionModelNotFoundException * @throws thinkexceptionDbException */ public function getChildrenAdminIds($withself = false, $uid = null) { $childrenAdminIds = []; if (!$this->isSuperAdmin($uid)) { $groupIds = $this->getChildrenGroupIds(false, $uid); $authGroupList = appadminmodelAuthGroupAccess:: field('uid,group_id') ->where('group_id', 'in', $groupIds) ->select(); foreach ($authGroupList as $k => $v) { $childrenAdminIds[] = $v['uid']; } } else { //超级管理员拥有所有人的权限 $childrenAdminIds = Admin::column('id'); } $id = $uid ? $uid : $this->id; if ($withself) { if (!in_array($id, $childrenAdminIds)) { $childrenAdminIds[] = $id; } } else { $childrenAdminIds = array_diff($childrenAdminIds, [$id]); } return $childrenAdminIds; } /** * 判断指定管理员是否为超级管理员 * @param null $uid 指定管理id * @return bool */ public function isSuperAdmin($uid = null) { return in_array('*', $this->getRuleIds($uid)) ? TRUE : FALSE; } /** * 取出指定管理员的管理组id * @param bool $withself 是否包含自身 * @param null $uid 指定id * @return array * @throws thinkdbexceptionDataNotFoundException * @throws thinkdbexceptionModelNotFoundException * @throws thinkexceptionDbException */ public function getChildrenGroupIds($withself = false, $uid = null) { //取出指定管理员所有的分组 $groups = $this->getGroups($uid); $groupIds = []; foreach ($groups as $k => $v) { $groupIds[] = $v['id']; } // 取出所有分组 $groupList = AuthGroup::where(['status' => 'normal'])->select(); $objList = []; foreach ($groups as $K => $v) { if ($v['rules'] === '*') { $objList = $groupList; break; } // 取出包含自己的所有子节点 $childrenList = Tree::instance()->init($groupList)->getChildren($v['id'], true); $obj = Tree::instance()->init($childrenList)->getTreeArray($v['pid']); $objList = array_merge($objList, Tree::instance()->getTreeList($obj)); } $childrenGroupIds = []; foreach ($objList as $k => $v) { $childrenGroupIds[] = $v['id']; } if (!$withself) { $childrenGroupIds = array_diff($childrenGroupIds, $groupIds); } return $childrenGroupIds; } /** * 通过管理组id查询下属管理组 * @param $groupId 指定管理组id * @param bool $withself 是否包含自身 * @return array * @throws thinkdbexceptionDataNotFoundException * @throws thinkdbexceptionModelNotFoundException * @throws thinkexceptionDbException */ public function getGroupsByGroupId($groupId, $withself = false) { $group = AuthGroup::get($groupId)->toArray(); // 取出所有分组 $groupList = AuthGroup::where(['status' => 'normal'])->select(); $objList = []; if ($group['rules'] === '*') { $objList = $groupList; } else { $childrenList = Tree::instance()->init($groupList)->getChildren($group['id'], true); $obj = Tree::instance()->init($childrenList)->getTreeArray($group['pid']); $objList = array_merge($objList, Tree::instance()->getTreeList($obj)); } $childrenGroupIds = []; foreach ($objList as $k => $v) { $childrenGroupIds[] = $v['id']; } if (!$withself) { $childrenGroupIds = array_diff($childrenGroupIds, $group['id']); } return $childrenGroupIds; }}
希望以上内容对你有所帮助!如果还有其他问题,请随时提问。 各类知识收集 拥有多年CMS企业建站经验,对 iCMS, LeCMS, ClassCMS, Fastadmin, PbootCMS, PHPCMS, 易优CMS, YzmCMS, 讯睿CMS, 极致CMS, Wordpress, HkCMS, YznCMS, WellCMS, ThinkCMF, 等各类cms的相互转化,程序开发,网站制作,bug修复,程序杀毒,插件定制都可以提供最佳解决方案。