81 lines
2.0 KiB
PHP
Executable File
81 lines
2.0 KiB
PHP
Executable File
<?php
|
|
|
|
namespace Common\Workspaces;
|
|
|
|
use Auth;
|
|
use Common\Auth\Permissions\Permission;
|
|
use Common\Auth\Roles\Role;
|
|
use Common\Auth\Traits\HasAvatarAttribute;
|
|
use Common\Auth\Traits\HasDisplayNameAttribute;
|
|
use Illuminate\Database\Eloquent\Builder;
|
|
use Illuminate\Database\Eloquent\Model;
|
|
|
|
class WorkspaceMember extends Model
|
|
{
|
|
use HasAvatarAttribute, HasDisplayNameAttribute;
|
|
|
|
protected $table = 'workspace_user';
|
|
protected $guarded = ['id'];
|
|
protected $appends = ['display_name', 'model_type'];
|
|
protected $casts = ['is_owner' => 'boolean'];
|
|
|
|
public function permissions()
|
|
{
|
|
return $this->belongsToMany(
|
|
Permission::class,
|
|
'permissionables',
|
|
'permissionable_id',
|
|
'permission_id',
|
|
'role_id',
|
|
)
|
|
->where('permissionable_type', Role::MODEL_TYPE)
|
|
->select([
|
|
'permissions.id',
|
|
'permissions.name',
|
|
'permissions.restrictions',
|
|
]);
|
|
}
|
|
|
|
public function workspace()
|
|
{
|
|
return $this->belongsTo(Workspace::class);
|
|
}
|
|
|
|
public function scopeCurrentUserAndOwnerOnly(Builder $builder): self
|
|
{
|
|
$builder->where(function (Builder $builder) {
|
|
$builder
|
|
->where('workspace_user.user_id', Auth::id())
|
|
->orWhere('workspace_user.is_owner', true);
|
|
});
|
|
|
|
return $this;
|
|
}
|
|
|
|
public static function getModelTypeAttribute(): string
|
|
{
|
|
return 'member';
|
|
}
|
|
|
|
public function hasPermission(string $name): bool
|
|
{
|
|
return $this->is_owner || !is_null($this->getPermission($name));
|
|
}
|
|
|
|
public function getPermission(string $name): ?Permission
|
|
{
|
|
return $this->permissions->first(function (Permission $permission) use (
|
|
$name
|
|
) {
|
|
return $permission->name === $name;
|
|
});
|
|
}
|
|
|
|
public function getRoleNameAttribute()
|
|
{
|
|
return $this->is_owner
|
|
? 'Workspace Owner'
|
|
: $this->attributes['role_name'];
|
|
}
|
|
}
|