权限管理
This commit is contained in:
parent
ecae3e90f1
commit
7a6628a95f
@ -155,6 +155,8 @@ class Permissions extends CatchController
|
|||||||
throw new FailedException('存在子菜单,无法删除');
|
throw new FailedException('存在子菜单,无法删除');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$this->permissions->findBy($id)->roles()->detach();
|
||||||
|
|
||||||
return CatchResponse::success($this->permissions->deleteBy($id));
|
return CatchResponse::success($this->permissions->deleteBy($id));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -7,6 +7,7 @@ use catcher\CatchForm;
|
|||||||
use catcher\CatchResponse;
|
use catcher\CatchResponse;
|
||||||
use catcher\exceptions\FailedException;
|
use catcher\exceptions\FailedException;
|
||||||
use catcher\Tree;
|
use catcher\Tree;
|
||||||
|
use think\response\Json;
|
||||||
|
|
||||||
class Roles extends CatchController
|
class Roles extends CatchController
|
||||||
{
|
{
|
||||||
@ -53,13 +54,18 @@ class Roles extends CatchController
|
|||||||
*
|
*
|
||||||
* @time 2019年12月11日
|
* @time 2019年12月11日
|
||||||
* @param Request $request
|
* @param Request $request
|
||||||
* @return \think\response\Json
|
* @return Json
|
||||||
|
* @throws \think\db\exception\DbException
|
||||||
*/
|
*/
|
||||||
public function save(Request $request)
|
public function save(Request $request)
|
||||||
{
|
{
|
||||||
|
$this->role->storeBy($request->param());
|
||||||
|
|
||||||
|
if (!empty($request->param('permissionids'))) {
|
||||||
|
$this->role->attach($request->param('permissionids'));
|
||||||
|
}
|
||||||
// 添加角色
|
// 添加角色
|
||||||
dd($request->param('roleids'));
|
return CatchResponse::success();
|
||||||
return CatchResponse::success($this->role->storeBy($request->param()));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public function read($id)
|
public function read($id)
|
||||||
@ -83,6 +89,7 @@ class Roles extends CatchController
|
|||||||
$form->hidden('parent_id')->default($role->parent_id);
|
$form->hidden('parent_id')->default($role->parent_id);
|
||||||
$form->text('role_name', '角色名称', true)->default($role->name)->verify('required')->placeholder('请输入角色名称');
|
$form->text('role_name', '角色名称', true)->default($role->name)->verify('required')->placeholder('请输入角色名称');
|
||||||
$form->textarea('description', '角色描述')->default($role->description)->placeholder('请输入角色描述');
|
$form->textarea('description', '角色描述')->default($role->description)->placeholder('请输入角色描述');
|
||||||
|
$form->dom('<div id="permissions"></div>', '权限');
|
||||||
$form->formBtn('submitRole');
|
$form->formBtn('submitRole');
|
||||||
|
|
||||||
return $this->fetch([
|
return $this->fetch([
|
||||||
@ -96,11 +103,22 @@ class Roles extends CatchController
|
|||||||
* @time 2019年12月11日
|
* @time 2019年12月11日
|
||||||
* @param $id
|
* @param $id
|
||||||
* @param Request $request
|
* @param Request $request
|
||||||
* @return \think\response\Json
|
* @return Json
|
||||||
|
* @throws \think\db\exception\DbException
|
||||||
*/
|
*/
|
||||||
public function update($id, Request $request)
|
public function update($id, Request $request)
|
||||||
{
|
{
|
||||||
return CatchResponse::success($this->role->updateBy($id, $request->param()));
|
$this->role->updateBy($id, $request->param());
|
||||||
|
|
||||||
|
$role = $this->role->findBy($id);
|
||||||
|
|
||||||
|
$role->detach();
|
||||||
|
|
||||||
|
if (!empty($request->param('permissionids'))) {
|
||||||
|
$role->attach($request->param('permissionids'));
|
||||||
|
}
|
||||||
|
|
||||||
|
return CatchResponse::success();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -111,26 +129,57 @@ class Roles extends CatchController
|
|||||||
* @throws \think\db\exception\DataNotFoundException
|
* @throws \think\db\exception\DataNotFoundException
|
||||||
* @throws \think\db\exception\DbException
|
* @throws \think\db\exception\DbException
|
||||||
* @throws \think\db\exception\ModelNotFoundException
|
* @throws \think\db\exception\ModelNotFoundException
|
||||||
* @return \think\response\Json
|
* @return Json
|
||||||
*/
|
*/
|
||||||
public function delete($id)
|
public function delete($id)
|
||||||
{
|
{
|
||||||
if ($this->role->where('parent_id', $id)->find()) {
|
if ($this->role->where('parent_id', $id)->find()) {
|
||||||
throw new FailedException('存在子角色,无法删除');
|
throw new FailedException('存在子角色,无法删除');
|
||||||
}
|
}
|
||||||
|
$role = $this->role->findBy($id);
|
||||||
// 删除权限
|
// 删除权限
|
||||||
return CatchResponse::success($this->role->deleteBy($id));
|
$role->detach();
|
||||||
|
// 删除用户关联
|
||||||
|
$role->users()->detach();
|
||||||
|
// 删除
|
||||||
|
$this->role->deleteBy($id);
|
||||||
|
|
||||||
|
return CatchResponse::success();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
* @time 2019年12月11日
|
* @time 2019年12月11日
|
||||||
* @param Request $request
|
* @param Request $request
|
||||||
* @return \think\response\Json
|
* @return Json
|
||||||
*/
|
*/
|
||||||
public function list(Request $request)
|
public function list(Request $request)
|
||||||
{
|
{
|
||||||
return CatchResponse::success(Tree::done($this->role->getList($request->param())));
|
return CatchResponse::success(Tree::done($this->role->getList($request->param())));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @time 2019年12月11日
|
||||||
|
* @param Request $request
|
||||||
|
* @param \catchAdmin\permissions\model\Permissions $permission
|
||||||
|
* @return Json
|
||||||
|
*/
|
||||||
|
public function getPermissions(Request $request, \catchAdmin\permissions\model\Permissions $permission): Json
|
||||||
|
{
|
||||||
|
$permissions = Tree::done($permission->getList());
|
||||||
|
|
||||||
|
$permissionIds = [];
|
||||||
|
if ($request->param('role_id')) {
|
||||||
|
$roleHasPermissions = $this->role->findBy($request->param('role_id'))->getPermissions();
|
||||||
|
foreach ($roleHasPermissions as $_permission) {
|
||||||
|
$permissionIds[] = $_permission->pivot->permission_id;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return CatchResponse::success([
|
||||||
|
'permissions' => $permissions,
|
||||||
|
'hasPermissions' => $permissionIds,
|
||||||
|
]);
|
||||||
|
}
|
||||||
}
|
}
|
@ -31,6 +31,10 @@ trait HasRolesTrait
|
|||||||
*/
|
*/
|
||||||
public function attach(array $roles)
|
public function attach(array $roles)
|
||||||
{
|
{
|
||||||
|
if (empty($roles)) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
return $this->roles()->attach($roles);
|
return $this->roles()->attach($roles);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -30,7 +30,7 @@ class Permissions extends CatchModel
|
|||||||
public const PUT = 'put';
|
public const PUT = 'put';
|
||||||
public const DELETE = 'delete';
|
public const DELETE = 'delete';
|
||||||
|
|
||||||
public function getList($search)
|
public function getList($search = [])
|
||||||
{
|
{
|
||||||
return $this->when($search['name'] ?? false, function ($query) use ($search){
|
return $this->when($search['name'] ?? false, function ($query) use ($search){
|
||||||
$query->whereLike('name', $search['name']);
|
$query->whereLike('name', $search['name']);
|
||||||
@ -47,6 +47,6 @@ class Permissions extends CatchModel
|
|||||||
|
|
||||||
public function roles(): \think\model\relation\BelongsToMany
|
public function roles(): \think\model\relation\BelongsToMany
|
||||||
{
|
{
|
||||||
return $this->belongsToMany(Roles::class, 'role_has_permissions');
|
return $this->belongsToMany(Roles::class, 'role_has_permissions', 'role_id', 'permission_id');
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -40,7 +40,7 @@ class Roles extends CatchModel
|
|||||||
*/
|
*/
|
||||||
public function users(): \think\model\relation\BelongsToMany
|
public function users(): \think\model\relation\BelongsToMany
|
||||||
{
|
{
|
||||||
return $this->belongsToMany(Users::class, 'user_has_roles');
|
return $this->belongsToMany(Users::class, 'user_has_roles', 'uid', 'role_id');
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -56,10 +56,9 @@ class Roles extends CatchModel
|
|||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
* @time 2019年12月08日
|
* @time 2019年12月08日
|
||||||
* @param $rid
|
|
||||||
* @return mixed
|
* @return mixed
|
||||||
*/
|
*/
|
||||||
public function getRoles($rid)
|
public function getPermissions()
|
||||||
{
|
{
|
||||||
return $this->permissions()->select();
|
return $this->permissions()->select();
|
||||||
}
|
}
|
||||||
|
@ -3,8 +3,9 @@
|
|||||||
$router->resource('role', '\catchAdmin\permissions\controller\Roles');
|
$router->resource('role', '\catchAdmin\permissions\controller\Roles');
|
||||||
// 角色列表
|
// 角色列表
|
||||||
$router->get('roles', '\catchAdmin\permissions\controller\Roles/list');
|
$router->get('roles', '\catchAdmin\permissions\controller\Roles/list');
|
||||||
|
$router->get('/role/get/permissions', '\catchAdmin\permissions\controller\Roles/getPermissions');
|
||||||
|
|
||||||
// 权限
|
// 权限
|
||||||
$router->resource('permission', '\catchAdmin\permissions\controller\Permissions');
|
$router->resource('permission', '\catchAdmin\permissions\controller\Permissions');
|
||||||
// 权限列表
|
// 权限列表
|
||||||
$router->get('permissions', '\catchAdmin\permissions\controller\Permissions/list');
|
$router->get('permissions', '\catchAdmin\permissions\controller\Permissions/list');
|
||||||
|
@ -23,9 +23,9 @@
|
|||||||
}, 'post');
|
}, 'post');
|
||||||
return false;
|
return false;
|
||||||
});
|
});
|
||||||
admin.req('{:url("permissions")}',{}, function (response) {
|
admin.req('{:url("/role/get/permissions")}',{}, function (response) {
|
||||||
var inst1 = authtree.render('#permissions', response.data,{
|
authtree.render('#permissions', response.data.permissions,{
|
||||||
inputname: 'authids[]',
|
inputname: 'permissionids[]',
|
||||||
layfilter: 'lay-check-auth',
|
layfilter: 'lay-check-auth',
|
||||||
autowidth: true,
|
autowidth: true,
|
||||||
nameKey: 'permission_name',
|
nameKey: 'permission_name',
|
||||||
|
@ -1,13 +1,29 @@
|
|||||||
{$form|raw}
|
{$form|raw}
|
||||||
<script>
|
<script>
|
||||||
layui.use(['layer', 'form', 'admin', 'formX'], function () {
|
layui.use(['layer', 'form', 'admin', 'formX', 'authtree'], function () {
|
||||||
var $ = layui.jquery;
|
var $ = layui.jquery;
|
||||||
var layer = layui.layer;
|
var layer = layui.layer;
|
||||||
var form = layui.form;
|
var form = layui.form;
|
||||||
var admin = layui.admin;
|
var admin = layui.admin;
|
||||||
var mUser = admin.getLayerData('#role'); // 列表页面传递的数据,#modelUserForm这个只要写弹窗内任意一个元素的id即可
|
var mUser = admin.getLayerData('#role'); // 列表页面传递的数据,#modelUserForm这个只要写弹窗内任意一个元素的id即可
|
||||||
|
var authtree = layui.authtree;
|
||||||
|
|
||||||
// 回显数据
|
// 回显数据
|
||||||
form.val('role', mUser);
|
form.val('role', mUser);
|
||||||
|
admin.req('{:url("/role/get/permissions")}',{role_id:"{$role_id}"}, function (response) {
|
||||||
|
console.log(response.data)
|
||||||
|
authtree.render('#permissions', response.data.permissions,{
|
||||||
|
inputname: 'permissionids[]',
|
||||||
|
layfilter: 'lay-check-auth',
|
||||||
|
autowidth: true,
|
||||||
|
nameKey: 'permission_name',
|
||||||
|
valueKey: 'id',
|
||||||
|
childKey: 'children',
|
||||||
|
collapseLeafNode: true,
|
||||||
|
theme: 'auth-skin-default',
|
||||||
|
checkedKey: response.data.hasPermissions
|
||||||
|
});
|
||||||
|
})
|
||||||
// 表单提交事件
|
// 表单提交事件
|
||||||
form.on('submit(submitRole)', function (data) {
|
form.on('submit(submitRole)', function (data) {
|
||||||
admin.req('role/'+ "{$role_id}", data.field, function (response) {
|
admin.req('role/'+ "{$role_id}", data.field, function (response) {
|
||||||
|
@ -117,7 +117,7 @@
|
|||||||
title: addRole ? '新增子角色' : ((mRole ? '修改' : '添加') + '角色'),
|
title: addRole ? '新增子角色' : ((mRole ? '修改' : '添加') + '角色'),
|
||||||
url: addRole ? '/role/create' + '?id='+mRole.id : (mRole ? '/role/'+mRole.id + '/edit': '/role/create'),
|
url: addRole ? '/role/create' + '?id='+mRole.id : (mRole ? '/role/'+mRole.id + '/edit': '/role/create'),
|
||||||
data: addRole ? '' : mRole, // 传递数据到表单页面
|
data: addRole ? '' : mRole, // 传递数据到表单页面
|
||||||
area: '800px',
|
area: '700px',
|
||||||
end: function () {
|
end: function () {
|
||||||
if (admin.getLayerData(layIndex, 'formOk')) { // 判断表单操作成功标识
|
if (admin.getLayerData(layIndex, 'formOk')) { // 判断表单操作成功标识
|
||||||
if (addRole) {
|
if (addRole) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user