save
This commit is contained in:
parent
868c8d3298
commit
f9957ff935
@ -19,7 +19,7 @@ class AdminRuleController extends Crud
|
|||||||
*
|
*
|
||||||
* @var string[]
|
* @var string[]
|
||||||
*/
|
*/
|
||||||
public $noNeedAuth = ['get'];
|
public $noNeedAuth = ['get', 'controller'];
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @var AdminRule
|
* @var AdminRule
|
||||||
@ -62,7 +62,8 @@ class AdminRuleController extends Crud
|
|||||||
*/
|
*/
|
||||||
function get(Request $request): Response
|
function get(Request $request): Response
|
||||||
{
|
{
|
||||||
[$rules, $items] = $this->getRulesAndItems();
|
$rules = $this->getRules(admin('roles'));
|
||||||
|
$items = AdminRule::orderBy('weight', 'desc')->get()->toArray();
|
||||||
$types = $request->get('type', '0,1');
|
$types = $request->get('type', '0,1');
|
||||||
$types = is_string($types) ? explode(',', $types) : [0, 1];
|
$types = is_string($types) ? explode(',', $types) : [0, 1];
|
||||||
$items_map = [];
|
$items_map = [];
|
||||||
@ -98,6 +99,38 @@ class AdminRuleController extends Crud
|
|||||||
return $this->json(0, 'ok', $formatted_items);
|
return $this->json(0, 'ok', $formatted_items);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取控制器详细权限
|
||||||
|
* @param Request $request
|
||||||
|
* @return Response
|
||||||
|
*/
|
||||||
|
public function controller(Request $request): Response
|
||||||
|
{
|
||||||
|
$controller = $request->get('controller');
|
||||||
|
if (!$controller) {
|
||||||
|
return $this->json(0, 'ok', []);
|
||||||
|
}
|
||||||
|
$rules = $this->getRules(admin('roles'));
|
||||||
|
// 超级管理员
|
||||||
|
if (in_array('*', $rules)) {
|
||||||
|
return $this->json(0, 'ok', ['*']);
|
||||||
|
}
|
||||||
|
// 获取详细权限
|
||||||
|
$controller_search = str_replace('\\', '\\\\', $controller);
|
||||||
|
$keys = AdminRule::where('key', 'like', "$controller_search%")
|
||||||
|
->whereIn('id', $rules)->pluck('key');
|
||||||
|
$permissions = [];
|
||||||
|
$prefix_length = strlen($controller);
|
||||||
|
foreach ($keys as $key) {
|
||||||
|
if ($key === $controller) {
|
||||||
|
$permissions = ['*'];
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
$permissions[] = substr($key, $prefix_length);
|
||||||
|
}
|
||||||
|
return $this->json(0, 'ok', $permissions);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 根据类同步规则到数据库
|
* 根据类同步规则到数据库
|
||||||
* @return void
|
* @return void
|
||||||
@ -307,11 +340,11 @@ class AdminRuleController extends Crud
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* 获取权限规则
|
* 获取权限规则
|
||||||
|
* @param $roles
|
||||||
* @return array
|
* @return array
|
||||||
*/
|
*/
|
||||||
protected function getRulesAndItems(): array
|
protected function getRules($roles): array
|
||||||
{
|
{
|
||||||
$roles = admin('roles');
|
|
||||||
$rules_strings = $roles ? AdminRole::whereIn('id', $roles)->pluck('rules') : [];
|
$rules_strings = $roles ? AdminRole::whereIn('id', $roles)->pluck('rules') : [];
|
||||||
$rules = [];
|
$rules = [];
|
||||||
foreach ($rules_strings as $rule_string) {
|
foreach ($rules_strings as $rule_string) {
|
||||||
@ -320,9 +353,7 @@ class AdminRuleController extends Crud
|
|||||||
}
|
}
|
||||||
$rules = array_merge($rules, explode(',', $rule_string));
|
$rules = array_merge($rules, explode(',', $rule_string));
|
||||||
}
|
}
|
||||||
|
return $rules;
|
||||||
$items = AdminRule::orderBy('weight', 'desc')->get()->toArray();
|
|
||||||
return [$rules, $items];
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -150,27 +150,29 @@
|
|||||||
|
|
||||||
<!-- 表格顶部工具栏 -->
|
<!-- 表格顶部工具栏 -->
|
||||||
<script type="text/html" id="table-toolbar">
|
<script type="text/html" id="table-toolbar">
|
||||||
<button class="pear-btn pear-btn-primary pear-btn-md" lay-event="add">
|
<button class="pear-btn pear-btn-primary pear-btn-md" lay-event="add" permission="insert">
|
||||||
<i class="layui-icon layui-icon-add-1"></i>新增
|
<i class="layui-icon layui-icon-add-1"></i>新增
|
||||||
</button>
|
</button>
|
||||||
<button class="pear-btn pear-btn-danger pear-btn-md" lay-event="batchRemove">
|
<button class="pear-btn pear-btn-danger pear-btn-md" lay-event="batchRemove" permission="delete">
|
||||||
<i class="layui-icon layui-icon-delete"></i>删除
|
<i class="layui-icon layui-icon-delete"></i>删除
|
||||||
</button>
|
</button>
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<!-- 表格行工具栏 -->
|
<!-- 表格行工具栏 -->
|
||||||
<script type="text/html" id="table-bar">
|
<script type="text/html" id="table-bar">
|
||||||
<button class="pear-btn pear-btn-xs tool-btn" lay-event="edit">编辑</button>
|
<button class="pear-btn pear-btn-xs tool-btn" lay-event="edit" permission="update">编辑</button>
|
||||||
<button class="pear-btn pear-btn-xs tool-btn" lay-event="remove">删除</button>
|
<button class="pear-btn pear-btn-xs tool-btn" lay-event="remove" permission="delete">删除</button>
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<script src="/app/admin/component/layui/layui.js"></script>
|
<script src="/app/admin/component/layui/layui.js"></script>
|
||||||
<script src="/app/admin/component/pear/pear.js"></script>
|
<script src="/app/admin/component/pear/pear.js"></script>
|
||||||
<script src="/app/admin/admin/js/index.js"></script>
|
<script src="/app/admin/admin/js/index.js"></script>
|
||||||
|
<script src="/app/admin/admin/js/permission.js"></script>
|
||||||
<script>
|
<script>
|
||||||
|
|
||||||
// 相关接口
|
// 相关接口
|
||||||
const PRIMARY_KEY = 'id';
|
const PRIMARY_KEY = 'id';
|
||||||
|
const CONTROLLER = 'plugin\\admin\\app\\controller\\UserController';
|
||||||
const SELECT_API = "/app/admin/user/select";
|
const SELECT_API = "/app/admin/user/select";
|
||||||
const UPDATE_API = "/app/admin/user/update";
|
const UPDATE_API = "/app/admin/user/update";
|
||||||
const DELETE_API = "/app/admin/user/delete";
|
const DELETE_API = "/app/admin/user/delete";
|
||||||
|
@ -97,6 +97,10 @@ a {
|
|||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
*[permission] {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
/** 左侧菜单 Start **/
|
/** 左侧菜单 Start **/
|
||||||
|
|
||||||
.pear-nav-tree .layui-nav-item a span {
|
.pear-nav-tree .layui-nav-item a span {
|
||||||
|
22
src/plugin/admin/public/admin/js/permission.js
Normal file
22
src/plugin/admin/public/admin/js/permission.js
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
/**
|
||||||
|
* 获取控制器详细权限,并决定展示哪些按钮或dom元素
|
||||||
|
*/
|
||||||
|
layui.$(function () {
|
||||||
|
let $ = layui.$;
|
||||||
|
$.ajax({
|
||||||
|
url: "/app/admin/admin-rule/controller",
|
||||||
|
dataType: "json",
|
||||||
|
data: {controller: CONTROLLER},
|
||||||
|
success: function (res) {
|
||||||
|
let style = '';
|
||||||
|
layui.each(res.data || [], function (k, action) {
|
||||||
|
if (action === '*') {
|
||||||
|
style = '*[permission]{display: initial}';
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
style += '*[permission="'+action+'"]{display: initial}';
|
||||||
|
});
|
||||||
|
$("head").append("<style>"+style+"</style>");
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
Loading…
Reference in New Issue
Block a user