启动权限设计是后台管理很重要的一个功能,所以一定要好好设计。PHP在这方面已经有很多包了,所以我们不需要重新发明轮子。当然,如果你愿意,可以从头开始~PS之前有几种方法可以做权限认证,先说一下常用的两种吧!目前每个页面认证需要的权限在一个统一的地方(中间件)验证一次。先看简单的表结构(只保留重要信息)数据库模型ER图(ps:在这种设计中,用户不会直接拥有权限,权限只能通过角色继承。有很多包会提供给用户直接拥有权限的能力)Model模型关系处理:用户模型belongsToMany(Role::class);}/**********************************************封装一个方法方便使用*1.需要的权限*2.遍历用户当前拥有的所有角色*3.然后根据角色判断当前是否有需要的权限*****************************************/publicfunctionhasPermission($permissionName){foreach($this->rolesas$role){if($role->permissions()->where('name',$permissionName)->exists()){returntrue;;}}返回假;}}榜样belongsToMany(User::class);}//模型角色和权限之间的关系publicfunctionpermissions(){return$this->belongsToMany(Permission::class);}}权限模型belongsToMany(Role::class);}}数据库种子插入一些记录:###########################################用户:+--------+--------+----------+|编号|姓名|密码|+----------------+------------+|1|全球定位系统|123456|+-----------------+----------+|2|大卫|123456|+----------------+-----------+##########################################角色:+--------+--------+|编号|姓名|+----------------+|1|admin|+-----------------+###########################################权限:+--------+-----------------+|编号|姓名|+------------------------+|1|创建产品||2|删除产品|+-------------------------+###########################################role_user(用户gps具有admin角色身份)+--------+---------+|角色编号|用户ID|+--------+--------+|1|1|+----------------+##########################################permission_role(角色admin有创建和删除产品的权限)+--------+----------------+|角色编号|permission_id|+--------+---------------+|1|1||1|2|+------------------------+First总体介绍:user()->hasPermission('create_product')){abort(403);}//做点什么returnback()->with('status','Addproductsuccessfully');}publicfunctiondestroy(Product$product){//判断当前登录用户是否有权限if(!$request->user()->hasPermission('delete_product')){abort(403);}//做点什么returnback()->with('status','deleteproductsuccessfully');}}二通过上面的代码我们可以看出,即使封装了授权验证码,仍然需要通过不同的方式进行验证,并且可以扩展,兼容性不高。这个时候我们只需要在权限表中添加一个字段就可以解决问题1.permissions(添加一个route字段,如果laravel中没有使用,可以添加一个url字段来匹配)+-------+----------------+------+-----+--------+----------------+|字段|类型|空|键|默认|额外|+--------+-----------------+------+-----+--------+----------------+|编号|int(10)无符号|否|优先级|空|自动递增||姓名|变种(191)|否||空|||路线|变种(191)|否||空||+-------+-----------------+-----+-----+---------+----------------+2。这时候插入数据的时候,我们只需要做相关的entry+--------+----------------+------------------+|编号|姓名|路线|+------------------------+------------------+|1|创建产品|产品商店||2|删除产品|products.destroy|+------------------------+----------------+添加数据时,我们不需要在controller中校验,只需要新建一个中间件即可first()){//当前用户没有这个名字permissionif(!auth()->user()->hasPermission($permission->name)){returnresponse()->view('errors.403',['status'=>"权限不足,需要:{$permission->name}权限"]);}}返回$next($request);}}END如果在laravel中使用,已经有轮子,请使用https://github.com/spatie/laravel-permission
