Laravel 中间表(能自动插入数据吗)?

1》RBAC 数据库设计
Category(商户)表

字段名 数据类型 自增
Id Int(10)
Name Varchar(20)
roleId Tinyint(1)
Password Varchar(20)
Created_at Timestamp
Updated_at Timestamp

Part(角色)表

字段名 数据类型 自增
Id Int(10)
Name Varchar(20)
Description Varchar(20)
Created_at Timestamp
Updated_at Timestamp

Category_part(用户角色)表

字段名 数据类型 自增
Id Int(10)
category_id Int(11)
part_id Int(11)
Created_at Timestamp
Updated_at Timestamp

Access(权限表)

字段名 数据类型 自增
Id Int(10)
Title Varchar(20)
Route Varchar(255)
Created_at Timestamp
Updated_at Timestamp

Part_access表(角色权限表)

字段名 数据类型 自增
Id Int(10)
part_id Int(11)
access_id Int(11)
Created_at Timestamp
Updated_at Timestamp

2》模型关联

 public function parts()
 {
     return $this->belongsToMany(Part::class, 'part_category', 'category_id', 'part_id') ->withTimestamps();
 }

 // 1、需要的权限\ * 2、读取当前用户所拥有的权限* 3、再通过角色判断是否有当前需要的权限
 public function hasPermission($permissionName)
 {
         foreach ($this->parts as $part)
         {
             if ($part->access()->where('title', $permissionName)->exists()) 
         {
             return true;
        }
}
   return false;
 }
public function part()
{
   return $this->belongsToMany(Part::class,'access_part','access_id','part_id');
}
//所属角色的用户
public function category()
{
         return $this->belongsToMany(Category::class,'part_category','category_id','part_id');
}

//所属角色的权限
 public function access()
{
     return $this->belongsToMany(Access::class);
}

补充说明:
经手动在数据表(4张表)中添加对应的数据,再加上自己写的中间件,是可以判断当前登录用户是否有对应权限的。
中间件代码:

//把这个中间件放入路由组,把需要的验证的路由,放入这个中间组里
 public function handle($request, Closure $next)
{
     //获取当前路由的别名,如果没有返回 null
      $part = \Route::currentRouteName();
     // 判断权限表中这条路由是否需要验证
    if ($access = Access::where('url', $part)->first()) {
      // 当前用户不拥有这个权限的名字
    if (! auth()->user()->hasPermission($access->title)) {
            Alert::warning('您没有权限,请联系管理员!')->autoclose(3000);
       return redirect('/companies');
      }
 }
       return $next($request);
}

3》寻求帮助的问题(实际开发)
a、在新建角色---邦定权限时,怎样使---中间表(Part_access)能自动生成对应的数据?
b、在新建用户---选择角色时,怎样使---中间表(Category_part)能自动生成对应的数据?
c、怎样给一个用户设置为超级管理员?

本帖由 Summer 于 5年前 解除加精
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
讨论数量: 4
Epona

先好好排一下版吧

5年前 评论

代码块请使用 ``` 啦 :see_no_evil:

echo 'hello world';
5年前 评论

syncdetach 应该能满足你的需求吧, contains可以用来判断中间表关联是否存在 。

5年前 评论
战狼1991 (楼主) 5年前

搜索文档
多对多关联:模型关联《Laravel 5.8 中文文档》

5年前 评论
战狼1991 (楼主) 5年前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!