如何修改关系?



我的应用程序有2个主要模块是FooBar。它也有3种作用类型:admin,manager&staff.

每个用户被分配给一个主管,这样每个主管将有一些下属分配给他/她。

例如,staff1由manager1监督,manager1也由admin1监督。

此关系的当前实践在两个模块中都实现了。因此,每个主管都对下属的FooBar负责。

User.php

<?php
namespace App;
use SpatiePermissionTraitsHasRoles;
use IlluminateSupportStr;
class User {
protected $fillable = ['name','email','password','supervisor_id'];
protected $appends = ['role'];
public function getRoleAttribute(){
return $this->roles[0];
}
public function getNameAttribute($value){
return Str::title($value);
}
public function parent(){
return $this->hasOne('AppUserStructure', 'user_id');
}
public function scopeSupervisor($query){
return $query->where('id', $this->supervisor_id)->first();
}
public function foo(){
return $this->hasMany(Foo::class, 'user_id', 'id');
}
public function bar(){
return $this->hasMany(Bar::class, 'user_id', 'id');
}
}

UserStructure.php

<?php
namespace App;
use IlluminateDatabaseEloquentModel;
class UserStructure extends Model{
protected $fillable = ['user_id', 'parent_id'];
public function user(){
return $this->belongsTo('AppUser', 'user_id');
}
}

Role.php

<?php
namespace App;
use IlluminateDatabaseEloquentModel;
class Role extends Model{
protected $fillable = ['name'];
public function roles(){
return $this->belongsTo('AppUser', 'role');
}
}

RoleAndPermission.php

<?php
use IlluminateDatabaseSeeder;
use SpatiePermissionModelsRole;
use SpatiePermissionModelsPermission;
class RolesAndPermissionsSeeder extends Seeder{
public function run(){
$roles = ['admin','manager','staff'];
app()[SpatiePermissionPermissionRegistrar::class]->forgetCachedPermissions();
foreach ($roles as $role) {
Role::updateOrCreate(['name' => $role]);
}
}
}

UserSeeder.php

<?php
use IlluminateDatabaseSeeder;
use AppUser;
use AppUserStructure;
class UserSeeder extends Seeder{
public function run(){
$items = [
['role'=> 'admin',
'name'=> 'admin',
'email'=> 'admin@myapp.com',
'password'=> 'password',
'supervisor_id'=> 1],
['role'=> 'manager',
'name'=> 'manager',
'email'=> 'manager@myapp.com',
'password'=> 'password',
'supervisor_id'=> 1],
['role'=> 'staff',
'name'=> 'staff',
'email'=> 'staff@myapp.com',
'password'=> 'password',
'supervisor_id'=> 2],
];
foreach($items as $data) {
$user = User::create([
'name' => $data['name'],
'email' => $data['email'],
'password' => Hash::make($data['password']),
'supervisor_id' => $data['supervisor_id'],
]);
$user->assignRole($data['role']);
}
$userStructure = [
['parent_id'=> 0, 'user_id'=> 1],
['parent_id'=> 1, 'user_id'=> 2],
['parent_id'=> 2, 'user_id'=> 3]
];
UserStructure::insert($userStructure);        
}
}

我的问题是,我如何相应地修改这种关系,以便任何主管[admin/manager]将只分配给一个模块的下属[manager/staff] ?

(例句:Foo模块中staff1manager1监督.在Bar模块中,他将由manager2指导。

)。

据我所知,您可以在角色中添加一列建模(如类型),然后用条件

将角色分配给用户

最新更新