buildadmin/app/admin/controller/auth/Menu.php
2022-04-24 01:14:48 +08:00

116 lines
2.6 KiB
PHP

<?php
namespace app\admin\controller\auth;
use ba\Tree;
use app\admin\model\MenuRule;
use app\common\controller\Backend;
class Menu extends Backend
{
/**
* @var MenuRule
*/
protected $model = null;
/**
* @var Tree
*/
protected $tree = null;
protected $preExcludeFields = ['createtime', 'updatetime'];
protected $quickSearchField = 'title';
protected $keyword = false;
protected $modelValidate = false;
public function initialize()
{
parent::initialize();
$this->model = new MenuRule();
$this->tree = Tree::instance();
$this->keyword = $this->request->request("quick_search");
}
public function index()
{
if ($this->request->param('select')) {
$this->select();
}
$this->success('', [
'list' => $this->getMenus(),
'remark' => get_route_remark(),
]);
}
public function edit($id = null)
{
$row = $this->model->find($id);
if (!$row) {
$this->error(__('Record not found'));
}
if ($this->request->isPost()) {
parent::edit($id);
}
$this->success('', [
'row' => $row
]);
}
/**
* 重写select方法
*/
public function select()
{
$isTree = $this->request->param('isTree');
$data = $this->getMenus(false);
if ($isTree && !$this->keyword) {
$data = $this->tree->assembleTree($this->tree->getTreeArray($data, 'title'));
}
$this->success('', [
'options' => $data
]);
}
protected function getMenus($getButton = true)
{
$rules = $this->getRuleList($getButton);
return $this->tree->assembleChild($rules);
}
protected function getRuleList($getButton = true)
{
$ids = $this->auth->getRuleIds();
$where = [];
// 如果没有 * 则只获取用户拥有的规则
if (!in_array('*', $ids)) {
$where[] = ['id', 'in', $ids];
}
if (!$getButton) {
$where[] = ['type', 'in', ['menu_dir', 'menu']];
}
if ($this->keyword) {
$keyword = explode(' ', $this->keyword);
foreach ($keyword as $item) {
$where[] = [$this->quickSearchField, 'like', '%' . $item . '%'];
}
}
// 读取用户组所有权限规则
$rules = $this->model
->where($where)
->order('weigh desc,id asc')
->select();
return $rules;
}
}