| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159 | <?phpnamespace app\admin\controller\auth;use app\admin\model\AuthRule;use app\common\controller\Backend;use fast\Tree;use think\Cache;/** * 规则管理 * * @icon   fa fa-list * @remark 规则通常对应一个控制器的方法,同时左侧的菜单栏数据也从规则中体现,通常建议通过控制台进行生成规则节点 */class Rule extends Backend{    /**     * @var \app\admin\model\AuthRule     */    protected $model = null;    protected $rulelist = [];    protected $multiFields = 'ismenu,status';    public function _initialize()    {        parent::_initialize();        if (!$this->auth->isSuperAdmin()) {            $this->error(__('Access is allowed only to the super management group'));        }        $this->model = model('AuthRule');        // 必须将结果集转换为数组        $ruleList = \think\Db::name("auth_rule")->field('type,condition,remark,createtime,updatetime', true)->order('weigh DESC,id ASC')->select();        foreach ($ruleList as $k => &$v) {            $v['title'] = __($v['title']);        }        unset($v);        Tree::instance()->init($ruleList)->icon = ['    ', '    ', '    '];        $this->rulelist = Tree::instance()->getTreeList(Tree::instance()->getTreeArray(0), 'title');        $ruledata = [0 => __('None')];        foreach ($this->rulelist as $k => &$v) {            if (!$v['ismenu']) {                continue;            }            $ruledata[$v['id']] = $v['title'];            unset($v['spacer']);        }        unset($v);        $this->view->assign('ruledata', $ruledata);        $this->view->assign("menutypeList", $this->model->getMenutypeList());    }    /**     * 查看     */    public function index()    {        if ($this->request->isAjax()) {            $list = $this->rulelist;            $total = count($this->rulelist);            $result = array("total" => $total, "rows" => $list);            return json($result);        }        return $this->view->fetch();    }    /**     * 添加     */    public function add()    {        if ($this->request->isPost()) {            $this->token();            $params = $this->request->post("row/a", [], 'strip_tags');            if ($params) {                if (!$params['ismenu'] && !$params['pid']) {                    $this->error(__('The non-menu rule must have parent'));                }                $result = $this->model->validate()->save($params);                if ($result === false) {                    $this->error($this->model->getError());                }                Cache::rm('__menu__');                $this->success();            }            $this->error();        }        return $this->view->fetch();    }    /**     * 编辑     */    public function edit($ids = null)    {        $row = $this->model->get(['id' => $ids]);        if (!$row) {            $this->error(__('No Results were found'));        }        if ($this->request->isPost()) {            $this->token();            $params = $this->request->post("row/a", [], 'strip_tags');            if ($params) {                if (!$params['ismenu'] && !$params['pid']) {                    $this->error(__('The non-menu rule must have parent'));                }                if ($params['pid'] == $row['id']) {                    $this->error(__('Can not change the parent to self'));                }                if ($params['pid'] != $row['pid']) {                    $childrenIds = Tree::instance()->init(collection(AuthRule::select())->toArray())->getChildrenIds($row['id']);                    if (in_array($params['pid'], $childrenIds)) {                        $this->error(__('Can not change the parent to child'));                    }                }                //这里需要针对name做唯一验证                $ruleValidate = \think\Loader::validate('AuthRule');                $ruleValidate->rule([                    'name' => 'require|unique:AuthRule,name,' . $row->id,                ]);                $result = $row->validate()->save($params);                if ($result === false) {                    $this->error($row->getError());                }                Cache::rm('__menu__');                $this->success();            }            $this->error();        }        $this->view->assign("row", $row);        return $this->view->fetch();    }    /**     * 删除     */    public function del($ids = "")    {        if (!$this->request->isPost()) {            $this->error(__("Invalid parameters"));        }        $ids = $ids ? $ids : $this->request->post("ids");        if ($ids) {            $delIds = [];            foreach (explode(',', $ids) as $k => $v) {                $delIds = array_merge($delIds, Tree::instance()->getChildrenIds($v, true));            }            $delIds = array_unique($delIds);            $count = $this->model->where('id', 'in', $delIds)->delete();            if ($count) {                Cache::rm('__menu__');                $this->success();            }        }        $this->error();    }}
 |