1
私は3つのモデルを持っています。Laravel - リポジトリ内で雄弁な関係を実現する
class User extends Authenticatable
{
public function roles()
{
return $this->belongsToMany('App\Models\Role');
}
}
class Role extends Model
{
public function users()
{
return $this->belongsToMany('App\Models\User');
}
public function permissions()
{
return $this->belongsToMany('App\Models\Permission');
}
}
class Permission extends Model
{
public function roles()
{
return $this->belongsToMany('App\Models\Role');
}
public function roleHavePermission(Role $role)
{
if ($this->roles()->find($role->id)) {
return true;
}
return false;
}
public function userHavePermission(User $user = null)
{
$roles = [];
if (is_null($user)) {
$roles[] = Role::where('slug', 'guest')->first();
} else {
foreach ($user->roles as $role) {
$roles[] = $role;
}
}
foreach ($roles as $role) {
if ($this->roleHavePermission($role)) {
return true;
}
}
return false;
}
}
私のアプリケーションが成長したので、私はリポジトリに移動します。たとえば、これは私のPermissionRepository
です:
class PermissionRepository implements PermissionRepositoryInterface
{
protected $roleRepository;
/**
* PermissionRepository constructor.
* @param RoleRepositoryInterface $roleRepository
*/
public function __construct(RoleRepositoryInterface $roleRepository)
{
$this->roleRepository = $roleRepository;
}
public function action($routeName)
{
return Permission::where('action', $routeName)->first();
}
}
どのように私は、このリポジトリにroleHavePermission
とuserHavePermission
を実装することができますか?私はこの構文でroles
方法実装しようとした:
public function roles()
{
return Permission::roles();
}
をしかし許可の役割メソッドが静的にコールすることはできませんので、それは動作文句を言いません。ありがとう。
恐ろしい!ありがとうございました! – ma3x