AuthPermRepository.php 3.91 KB
<?php
namespace domain\system;

use Yii;
use domain\system\models\AuthPerm  as AuthPermModel;
use domain\system\models\AuthPermsRoutes as AuthPermsRoutesModel;

use function count;
use function explode;
use function implode;

class AuthPermRepository
{
    /**
     * @param $condition
     * @return null|static[]
     */
    static function findAll($condition)
    {
        if (empty($condition)) {
            return null;
        }
        return AuthPermModel::findAll($condition);
    }

    /**
     * @param $condition
     * @return array|\yii\db\ActiveRecord[]
     */
    static function getAllItems($condition, $limit = null)
    {
        if (empty($condition)) {
            return null;
        }
        $findModel = AuthPermModel::find();
        $findModel->where($condition);
        if ($limit) {
            $findModel->limit($limit);
        }
        $rows = $findModel->all();
        return $rows;
    }

    /**
     * @param $condition
     * @return null|static
     */
    static function findOne($condition)
    {
        if (empty($condition)) {
            return null;
        }

        return AuthPermModel::findOne($condition);
    }

    /**
     * 根据扫描的route 返回他对应的级别
     * @param $route
     * @return int
     */
    static function routeLevel($route)
    {
        $items = explode('/',$route);
        $len = count($items);

        if (2 == $len) {
            if ('*' == $items[1]) {
                return AuthPerm::LEVEL_MODULE;
            } else {
                return 0;
            }
        } else if(3 == $len){
            if ('*' == $items[2]) {
                return AuthPerm::LEVEL_CONTROLLER;
            } else {
                return AuthPerm::LEVEL_ACTION;
            }
        }
    }

    /**
     * @param $where
     * @param $asArr
     * @return array|\yii\db\ActiveRecord[]
     */
    static function getPermsRouters($where, $asArr = false)
    {
        $routersModel = AuthPermsRoutesModel::find();
        $routersModel->where($where);
        if ($asArr) {
            $routersModel->asArray();
        }
        $return = $routersModel->all();

        return $return;
    }

    /**
     * @param $confirmRouters
     * @return array
     */
    static function getGroupPermsRouters($confirmRouters)
    {
        $routers = $confirmRouters;
        $modulesArr = [];
        $controllerArr = [];
        $actionArr = [];
        $groupRouter = [];

        $permModel = AuthPermModel::find();
        $permModel->where('perm_id >0');
        $permModel->asArray();
        $confirmPerms = $permModel->all();

        foreach ($routers as $rk => $rv) {
            $groupRouter[$rv['perm_id']][] = $rv['route'];
        }

        foreach ($confirmPerms as $k => $v) {
            if (AuthPerm::LEVEL_MODULE == $v['level']) {
                $modulesArr[$v['perm_id']] = ['id' => $v['perm_id'], 'label' => $v['name'],'items' => [],'routes' => '', 'parent_id' => $v['parent_id']];
            } else if (AuthPerm::LEVEL_CONTROLLER == $v['level']) {
                $controllerArr[$v['perm_id']] = ['id' => $v['perm_id'], 'label' => $v['name'],'items' => [],'routes' => '', 'parent_id' => $v['parent_id']];
            } else if (AuthPerm::LEVEL_ACTION == $v['level']) {
                $myRouters = isset($groupRouter[$v['perm_id']])? implode(',', $groupRouter[$v['perm_id']]): '';
                $actionArr[$v['perm_id']] = ['id' => $v['perm_id'], 'label' => $v['name'], 'items' => [], 'routes' => $myRouters, 'parent_id' => $v['parent_id']];
            }
        }

        foreach ($actionArr as $ak => $av) {
            if (isset($controllerArr[$av['parent_id']])) {
                $controllerArr[$av['parent_id']]['items'][] = $av;
            }

        }

        foreach ($controllerArr as $ck => $cv) {
            if (isset($modulesArr[$cv['parent_id']])) {
                $modulesArr[$cv['parent_id']]['items'][] = $cv;
            }
        }

        return $modulesArr;

    }

}