From 7a6628a95fc9b3184cf85f25ff8fd7a1de20dfb5 Mon Sep 17 00:00:00 2001 From: wuyanwen Date: Thu, 12 Dec 2019 09:13:29 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9D=83=E9=99=90=E7=AE=A1=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../permissions/controller/Permissions.php | 2 + catchAdmin/permissions/controller/Roles.php | 67 ++++++++++++++++--- .../permissions/model/HasRolesTrait.php | 4 ++ catchAdmin/permissions/model/Permissions.php | 4 +- catchAdmin/permissions/model/Roles.php | 5 +- catchAdmin/permissions/route.php | 3 +- catchAdmin/permissions/view/roles/create.html | 6 +- catchAdmin/permissions/view/roles/edit.html | 18 ++++- catchAdmin/permissions/view/roles/index.html | 2 +- 9 files changed, 91 insertions(+), 20 deletions(-) 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}