diff --git a/app/Modules/Admin/Entities/Rabc/Admin.php b/app/Modules/Admin/Entities/Rabc/Admin.php
index 11f4197daad3f0eba89351e5599c93159d8be223..503c8770fbcc99795006bf3a786ddca042b5a587 100644
--- a/app/Modules/Admin/Entities/Rabc/Admin.php
+++ b/app/Modules/Admin/Entities/Rabc/Admin.php
@@ -141,4 +141,18 @@ class Admin extends Authenticatable implements JWTSubject
$this->attributes['admin_head'] = str_replace(Storage::url('/'), '', $key);
}
}
+
+ // 获取指定管理员的权限列表
+ public static function getRabcByAdmin($admin_id)
+ {
+ $roles = Admin::find($admin_id)->roles->toArray();
+ if (empty($roles)) return [];
+ $role_ids = array_column($roles, 'role_id');
+ if (empty($role_ids)) return [];
+ $menu_ids = AdminRoleWithMenu::getInstance()->getMenuIdsByRoles($role_ids);
+ if (empty($menu_ids)) return [];
+ $menus = AdminMenu::getInstance()->getMenusByIdsForRabc($menu_ids)->toArray();
+ if (empty($menus)) return [];
+ return $menus;
+ }
}
diff --git a/app/Modules/Admin/Http/Controllers/IndexController.php b/app/Modules/Admin/Http/Controllers/IndexController.php
index d1da68b2c94fc19b94448cf31df99b07747c078d..8ed6db2400e953afd7a3bc77df3a55d8f0ee7cf4 100644
--- a/app/Modules/Admin/Http/Controllers/IndexController.php
+++ b/app/Modules/Admin/Http/Controllers/IndexController.php
@@ -3,9 +3,12 @@
namespace App\Modules\Admin\Http\Controllers;
use App\Models\MonthModel;
+use App\Modules\Admin\Entities\Rabc\Admin;
+use App\Modules\Admin\Http\Middleware\CheckRabc;
use App\Modules\Admin\Services\IndexService;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
+use Illuminate\Support\Facades\Auth;
class IndexController extends BaseController
{
@@ -74,4 +77,47 @@ class IndexController extends BaseController
{
return $this->successJson($this->service->getServerStatus());
}
+
+ protected $guard = 'admin';
+ /**
+ * 检测接口是否有权限
+ *
+ * @param Request $request
+ *
+ * @return JsonResponse
+ */
+ public function checkApiPermission(Request $request): JsonResponse
+ {
+ $apis = $request->input('apis', []);
+ $menus = Admin::getRabcByAdmin(Auth::guard($this->guard)->id());
+ $result = [];
+
+ $admin_prefix = cnpscy_config('admin_prefix');
+ // 验证权限
+ foreach ($apis as $api){
+ $old_url = $api;
+ $api = trim($api, '/');
+ $full_url = $admin_prefix . '/' . $api;
+ $result[$api] = [
+ 'url' => $api,
+ 'old_url' => $old_url,
+ 'full_url' => $full_url,
+ 'status' => empty($menus) ? false : (isset($menus[$full_url]) ? true : false),
+ ];
+ }
+ // 验证一次白名单
+ $white_lists = CheckRabc::$white_lists;
+ foreach ($result as &$item){
+ if (!$item['status']){
+ if (in_array($item['url'], $white_lists)){
+ $item['status'] = true;
+ }
+ if (in_array($item['full_url'], $white_lists)){
+ $item['status'] = true;
+ }
+ }
+ }
+
+ return $this->successJson($result);
+ }
}
diff --git a/app/Modules/Admin/Http/Middleware/CheckRabc.php b/app/Modules/Admin/Http/Middleware/CheckRabc.php
index 15bf0046c23877bb918895dc98da551551d980d3..d536a02397c2fea1388cb553223aa106ebe47d23 100644
--- a/app/Modules/Admin/Http/Middleware/CheckRabc.php
+++ b/app/Modules/Admin/Http/Middleware/CheckRabc.php
@@ -16,6 +16,10 @@ class CheckRabc
protected $guard;
+ public static $white_lists = [
+ 'check-permission'
+ ];
+
/**
* Handle an incoming request.
*
@@ -40,17 +44,15 @@ class CheckRabc
// 超级管理员账户无需验证
if ($admin_id == 1) return true;
- $roles = Admin::getInstance()->detail($admin_id)->roles->toArray();
- if (empty($roles)) return false;
- $role_ids = array_column($roles, 'role_id');
- if (empty($role_ids)) return false;
- $menu_ids = AdminRoleWithMenu::getInstance()->getMenuIdsByRoles($role_ids);
- if (empty($menu_ids)) return false;
- $menus = AdminMenu::getInstance()->getMenusByIdsForRabc($menu_ids)->toArray();
+ $menus = Admin::getRabcByAdmin($admin_id);
if (empty($menus)) return false;
// 获取当前路由
$route_path = $request->route()->uri();
+ // 白名单
+ if (in_array($route_path, self::$white_lists)){
+ return true;
+ }
// 检测是否存在当前API
if (isset($menus[$route_path])){
// 验证请求方式
diff --git a/app/Modules/Admin/Http/Requests/Rabc/AdminRequest.php b/app/Modules/Admin/Http/Requests/Rabc/AdminRequest.php
index d912f45f293aaa834fe6fe913d4cfcdc95742079..8ff2e980125e157a4bdd7e41387c028b7cf5287e 100644
--- a/app/Modules/Admin/Http/Requests/Rabc/AdminRequest.php
+++ b/app/Modules/Admin/Http/Requests/Rabc/AdminRequest.php
@@ -48,6 +48,7 @@ class AdminRequest extends BaseRequest
'admin_name.required' => '请输入管理员账户!',
'admin_name.unique' => '管理员账户已存在!',
'password.confirmed' => '密码确认不匹配!',
+ 'is_check.required' => '请设置启用状态!',
];
}
}
diff --git a/app/Modules/Admin/Http/Requests/Rabc/AdminRoleRequest.php b/app/Modules/Admin/Http/Requests/Rabc/AdminRoleRequest.php
index c52ba766290b8f4f07b32d5a6a4fe0c610ac4abc..002c72295e38bf55a2b2093b8e36d93efbc035a9 100644
--- a/app/Modules/Admin/Http/Requests/Rabc/AdminRoleRequest.php
+++ b/app/Modules/Admin/Http/Requests/Rabc/AdminRoleRequest.php
@@ -35,6 +35,7 @@ class AdminRoleRequest extends BaseRequest
{
return [
'role_name.required' => '请输入角色名称!',
+ 'is_check.required' => '请设置启用状态!',
];
}
}
diff --git a/app/Modules/Admin/Resources/vue-element-admin/api/admins.js b/app/Modules/Admin/Resources/vue-element-admin/api/admins.js
index 201bbe3451f0e5874739e9ad5abe3f08b2de6f47..1ed1220910e88438d9ce4895af61af7671c5b0b1 100644
--- a/app/Modules/Admin/Resources/vue-element-admin/api/admins.js
+++ b/app/Modules/Admin/Resources/vue-element-admin/api/admins.js
@@ -1,16 +1,20 @@
import request from '@/utils/request'
-export function getAdminsSelect(params) {
+export function getAdminsSelect(params, get_url = false) {
+ var url = '/admins/getSelectLists';
+ if (get_url) return url;
return request({
- url: '/admins/getSelectLists',
+ url: url,
method: 'get',
params
});
}
-export function getList(params) {
+export function getList(params, get_url = false) {
+ var url = 'admins';
+ if (get_url) return url;
return request({
- url: 'admins',
+ url: url,
method: 'get',
params
})
@@ -24,33 +28,41 @@ export function getList(params) {
// })
// }
-export function create(data) {
+export function create(data, get_url = false) {
+ var url = '/admins/create';
+ if (get_url) return url;
return request({
- url: '/admins/create',
+ url: url,
method: 'post',
data
})
}
-export function update(data) {
+export function update(data, get_url = false) {
+ var url = '/admins/update';
+ if (get_url) return url;
return request({
- url: `/admins/update`,
+ url: url,
method: 'put',
data
})
}
-export function setDel(data) {
+export function setDel(data, get_url = false) {
+ var url = '/admins/delete';
+ if (get_url) return url;
return request({
- url: `/admins/delete`,
+ url: url,
method: 'delete',
data
})
}
-export function changeFiledStatus(data) {
+export function changeFiledStatus(data, get_url = false) {
+ var url = '/admins/changeFiledStatus';
+ if (get_url) return url;
return request({
- url: `/admins/changeFiledStatus`,
+ url: url,
method: 'put',
data
})
diff --git a/app/Modules/Admin/Resources/vue-element-admin/api/common.js b/app/Modules/Admin/Resources/vue-element-admin/api/common.js
index 7f287edce0f7eff0f3a14c7a4a4486b256e459d9..7cc61a8938a25971bd2851bd93a47cc582a34426 100644
--- a/app/Modules/Admin/Resources/vue-element-admin/api/common.js
+++ b/app/Modules/Admin/Resources/vue-element-admin/api/common.js
@@ -14,3 +14,13 @@ export function getMonthLists() {
method: 'get'
})
}
+
+export function checkPermission(apis) {
+ return request({
+ url: '/check-permission',
+ method: 'get',
+ params:{
+ apis
+ }
+ })
+}
diff --git a/app/Modules/Admin/Resources/vue-element-admin/utils/permission.js b/app/Modules/Admin/Resources/vue-element-admin/utils/permission.js
index 8e2bbadad0b3837edc2565b6cf5c323680855a6c..5b3044231f0798496a7fcc152de5a0772e40e71e 100644
--- a/app/Modules/Admin/Resources/vue-element-admin/utils/permission.js
+++ b/app/Modules/Admin/Resources/vue-element-admin/utils/permission.js
@@ -1,4 +1,5 @@
import store from '@/store'
+import {checkPermission as checkPermissionApi} from '@/api/common';
/**
* @param {Array} value
@@ -19,3 +20,17 @@ export default function checkPermission(value) {
return false
}
}
+
+// 检测按钮的权限
+export function checkButtonPermission(that, apis){
+ checkPermissionApi(apis).then(function (res){
+ let result = res.data;
+ for (let key in result) {
+ for (let permission in that.permission){
+ if (that.permission[permission].url == result[key].old_url){
+ that.permission[permission].status = result[key].status;
+ }
+ }
+ }
+ });
+}
diff --git a/app/Modules/Admin/Resources/vue-element-admin/views/admin_roles/index.vue b/app/Modules/Admin/Resources/vue-element-admin/views/admin_roles/index.vue
index f0924d12ac21db91aefb242c9987c052abcd56df..04fc7e36c451f18d7ef1fbeb60a791a1ca103692 100644
--- a/app/Modules/Admin/Resources/vue-element-admin/views/admin_roles/index.vue
+++ b/app/Modules/Admin/Resources/vue-element-admin/views/admin_roles/index.vue
@@ -376,7 +376,8 @@
},
async confirmRole() {
// 当前角色选中的菜单栏目列表
- this.role.menu_ids = this.$refs.tree.getCheckedKeys();
+ // this.$refs.tree.getHalfCheckedKeys() 返回选中子节点的父节点的key
+ this.role.menu_ids = this.$refs.tree.getCheckedKeys().concat(this.$refs.tree.getHalfCheckedKeys());
this.$refs['role'].validate(async (valid) => {
if (valid) {
diff --git a/app/Modules/Admin/Resources/vue-element-admin/views/admins/index.vue b/app/Modules/Admin/Resources/vue-element-admin/views/admins/index.vue
index 4fd3e0e8b7ecb898f31e97524e6ad0b3197efa1f..13d087a2d93c521760518b8a4c7994215a5025da 100644
--- a/app/Modules/Admin/Resources/vue-element-admin/views/admins/index.vue
+++ b/app/Modules/Admin/Resources/vue-element-admin/views/admins/index.vue
@@ -20,10 +20,11 @@
{{ $t('table.search') }}
-
+
{{ $t('table.batchDelete') }}
-
启用
-
+
禁用
- 编辑
- 删除
-
+ 编辑
+ 删除
@@ -134,7 +132,8 @@