批改状态:合格
老师批语:写的非常好!
管理员权限可能各不相同,菜单系统应只显示其有权限的菜单。
1、通过权限中间件获得权限数据
//权限校验中间件class Rightvalidate{public function handle($request, Closure $next){//取出用户信息$admin=Auth::user();$gid=$admin->gid;//获取当前用户的角色gid;$group=DB::table('admin_group')->where('gid',$gid)->item();if(!$group){return response('不存在该角色',200);}$rights=[];if ($group['rights']){//获取用户权限数组$rights=json_decode($group['rights'],true);}//当前用户访问的是哪个菜单$namespace=$request->route()->action['namespace'];$res=$request->route()->action['controller'];//获得控制器和方法$res=str_replace($namespace.'\\','',$res);//获得表示控制器和方法的数组$res=explode('@',$res);//查询当前url对应的菜单$cur_menu=DB::table('admin_menu')->where('controller',$res[0])->where('action',$res[1])->item();if(!$cur_menu){return response('该功能不存在',200);}//判断该mid是否在$rights数组中if(!in_array($cur_menu['mid'],$rights)){//使用助手函数response()响应,第一个参数为信息,第二个参数为状态码;return response('权限不足',200);}$admin->rights=$rights;$admin->right_title=$group['title'];$request->admin=$admin;return $next($request);}}
效果图
// 框架主页class Home extends Controller{public function index(Request $res){$data['admin']=$res->admin;$data['menus']=DB::table('admin_menu')->where('pid',0)->whereIn('mid',$data['admin']['rights'])->where('ishidden',0)->where('status',0)->get()->all();foreach ($data['menus'] as $key=>$val){$childs=DB::table('admin_menu')->whereIn('mid',$data['admin']['rights'])->where('pid',$val->mid)->where('ishidden',0)->where('status',0)->get()->all();$val->child=$childs;}return view('admins/home/index',$data);}}



总结:
1、充分利用Auth::user()提供的数据。
2、已经在权限中间件中编码获得权限数据,要充分利用。
3、对多维数组加强学习。在循环中使用率很高,对键名、值的读取、添加要熟练掌握。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号