1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859 |
- <?php
- namespace App\Http\Middleware;
- use App\Models\RoleUser;
- use Closure;
- use Illuminate\Http\Request;
- use Illuminate\Support\Facades\DB;
- use App\Services\RoleUserService;
- use App\Services\RoleService;
- use App\Services\MenuService;
- class CheckButtonPermission
- {
- public function handle(Request $request, Closure $next)
- {
- $user = $request->user;
- $userId = $user->id;
- if($userId == 1){
- return $next($request);
- }
- $roleUserList = RoleUserService::findAll(['user_id' => $userId]);
- $roleIds = collect($roleUserList)->pluck('role_id')->toArray();
- if(empty($roleIds)){
- $roleIds = [-1];
- }
- // 当前访问的路由
- $currentUri = ltrim($request->route()->uri(), '/');
-
- $menuInfo = MenuService::findOne(['uri' => $currentUri, 'type' => MenuService::model()::TYPE_BUTTON ,'status' => MenuService::model()::STATUS_SHOW]);
- if(empty($menuInfo)){
- return $next($request);
- }
-
- $roles = RoleService::model()::with(['menus'=> function ($query) {
- $query->where('type', MenuService::model()::TYPE_BUTTON);
- }])->whereIn('id',$roleIds)->get();
- $allMenusUris = [];
- foreach ($roles as $role) {
- if (!empty($role['menus_uris'])) {
- $allMenusUris = array_merge($allMenusUris, $role['menus_uris']);
- }
- }
-
- if(in_array($currentUri,$allMenusUris)){
- return $next($request);
- }else{
- return response()->json([
- 'code' => -1,
- 'timestamp' => time(),
- 'msg' => '无权限访问',
- 'data' => []
- ]);
- }
- }
- }
|