diff --git a/catchAdmin/permissions/controller/Permissions.php b/catchAdmin/permissions/controller/Permissions.php index 6b0047b..c1430c0 100644 --- a/catchAdmin/permissions/controller/Permissions.php +++ b/catchAdmin/permissions/controller/Permissions.php @@ -155,6 +155,8 @@ class Permissions extends CatchController throw new FailedException('存在子菜单,无法删除'); } + $this->permissions->findBy($id)->roles()->detach(); + return CatchResponse::success($this->permissions->deleteBy($id)); } } diff --git a/catchAdmin/permissions/controller/Roles.php b/catchAdmin/permissions/controller/Roles.php index b6a0228..f9dae32 100644 --- a/catchAdmin/permissions/controller/Roles.php +++ b/catchAdmin/permissions/controller/Roles.php @@ -7,6 +7,7 @@ use catcher\CatchForm; use catcher\CatchResponse; use catcher\exceptions\FailedException; use catcher\Tree; +use think\response\Json; class Roles extends CatchController { @@ -53,13 +54,18 @@ class Roles extends CatchController * * @time 2019年12月11日 * @param Request $request - * @return \think\response\Json + * @return Json + * @throws \think\db\exception\DbException */ 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($this->role->storeBy($request->param())); + return CatchResponse::success(); } public function read($id) @@ -83,6 +89,7 @@ class Roles extends CatchController $form->hidden('parent_id')->default($role->parent_id); $form->text('role_name', '角色名称', true)->default($role->name)->verify('required')->placeholder('请输入角色名称'); $form->textarea('description', '角色描述')->default($role->description)->placeholder('请输入角色描述'); + $form->dom('
', '权限'); $form->formBtn('submitRole'); return $this->fetch([ @@ -96,11 +103,22 @@ class Roles extends CatchController * @time 2019年12月11日 * @param $id * @param Request $request - * @return \think\response\Json + * @return Json + * @throws \think\db\exception\DbException */ 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\DbException * @throws \think\db\exception\ModelNotFoundException - * @return \think\response\Json + * @return Json */ public function delete($id) { if ($this->role->where('parent_id', $id)->find()) { 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日 * @param Request $request - * @return \think\response\Json + * @return Json */ public function list(Request $request) { 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, + ]); + } } \ No newline at end of file diff --git a/catchAdmin/permissions/model/HasRolesTrait.php b/catchAdmin/permissions/model/HasRolesTrait.php index 9667d09..edd8228 100644 --- a/catchAdmin/permissions/model/HasRolesTrait.php +++ b/catchAdmin/permissions/model/HasRolesTrait.php @@ -31,6 +31,10 @@ trait HasRolesTrait */ public function attach(array $roles) { + if (empty($roles)) { + return true; + } + return $this->roles()->attach($roles); } diff --git a/catchAdmin/permissions/model/Permissions.php b/catchAdmin/permissions/model/Permissions.php index 464d463..dea4225 100644 --- a/catchAdmin/permissions/model/Permissions.php +++ b/catchAdmin/permissions/model/Permissions.php @@ -30,7 +30,7 @@ class Permissions extends CatchModel public const PUT = 'put'; public const DELETE = 'delete'; - public function getList($search) + public function getList($search = []) { return $this->when($search['name'] ?? false, function ($query) use ($search){ $query->whereLike('name', $search['name']); @@ -47,6 +47,6 @@ class Permissions extends CatchModel 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'); } } \ No newline at end of file diff --git a/catchAdmin/permissions/model/Roles.php b/catchAdmin/permissions/model/Roles.php index 10e04fe..eac71fc 100644 --- a/catchAdmin/permissions/model/Roles.php +++ b/catchAdmin/permissions/model/Roles.php @@ -40,7 +40,7 @@ class Roles extends CatchModel */ 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日 - * @param $rid * @return mixed */ - public function getRoles($rid) + public function getPermissions() { return $this->permissions()->select(); } diff --git a/catchAdmin/permissions/route.php b/catchAdmin/permissions/route.php index f92c20a..1052bbb 100644 --- a/catchAdmin/permissions/route.php +++ b/catchAdmin/permissions/route.php @@ -3,8 +3,9 @@ $router->resource('role', '\catchAdmin\permissions\controller\Roles'); // 角色列表 $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->get('permissions', '\catchAdmin\permissions\controller\Permissions/list'); \ No newline at end of file +$router->get('permissions', '\catchAdmin\permissions\controller\Permissions/list'); diff --git a/catchAdmin/permissions/view/roles/create.html b/catchAdmin/permissions/view/roles/create.html index 6474fe4..e27f062 100644 --- a/catchAdmin/permissions/view/roles/create.html +++ b/catchAdmin/permissions/view/roles/create.html @@ -23,9 +23,9 @@ }, 'post'); return false; }); - admin.req('{:url("permissions")}',{}, function (response) { - var inst1 = authtree.render('#permissions', response.data,{ - inputname: 'authids[]', + admin.req('{:url("/role/get/permissions")}',{}, function (response) { + authtree.render('#permissions', response.data.permissions,{ + inputname: 'permissionids[]', layfilter: 'lay-check-auth', autowidth: true, nameKey: 'permission_name', diff --git a/catchAdmin/permissions/view/roles/edit.html b/catchAdmin/permissions/view/roles/edit.html index d8669bc..ce1d7d0 100644 --- a/catchAdmin/permissions/view/roles/edit.html +++ b/catchAdmin/permissions/view/roles/edit.html @@ -1,13 +1,29 @@ {$form|raw}