PHP建站技术分享-从入门到精通_各类知识收集PHP建站技术分享-从入门到精通_各类知识收集PHP建站技术分享-从入门到精通_各类知识收集

QQ:420220301 微信/手机:150-3210-7690
当前位置:首页 > CMS教程 > Fastadmin

扩展了权限控制类的几个方法,主要是可以根据自定义的id来查询,而不是默认传入登录的管理员id。

管理员 2024-12-14
Fastadmin
66

为了更新方便,没有直接修改原文件,直接继承扩展了原来的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修复,程序杀毒,插件定制都可以提供最佳解决方案。

相关推荐

扫码关注

qrcode

QQ交谈

回顶部