1. Go to this page and download the library: Download vimatech/laravel-membership library. Choose the download type require.
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
vimatech / laravel-membership example snippets
use Vimatech\Membership\Concerns\HasMembers;
class Organization extends Model
{
use HasMembers;
}
use Vimatech\Membership\Concerns\HasMemberships;
class User extends Authenticatable
{
use HasMemberships;
}
use Vimatech\Membership\Contracts\MembershipRole;
enum OrganizationRole: string implements MembershipRole
{
case Owner = 'owner';
case Admin = 'admin';
case Member = 'member';
public function level(): int
{
return match ($this) {
self::Owner => 100,
self::Admin => 50,
self::Member => 10,
};
}
public function label(): string
{
return match ($this) {
self::Owner => 'Owner',
self::Admin => 'Admin',
self::Member => 'Member',
};
}
}
$organization->addMember($user, OrganizationRole::Owner);
// With metadata
$organization->addMember($user, OrganizationRole::Member, metadata: ['source' => 'invitation']);
// With invited_by
$organization->addMember($user, OrganizationRole::Member, invitedBy: $currentUser);
// From entity side
$organization->hasMember($user);
$organization->isAdmin($user);
$organization->hasMemberWithRole($user, OrganizationRole::Owner);
// From member side
$user->isMemberOf($organization);
$user->hasRole($organization, OrganizationRole::Admin);
$user->hasAnyRole($organization, [OrganizationRole::Admin, OrganizationRole::Owner]);
$user->hasRoleAtLeast($organization, OrganizationRole::Member);
use Vimatech\Membership\Support\MembershipGate;
// In a Policy
public function update(User $user, Project $project): bool
{
return MembershipGate::for($user)->isAdmin($project);
}
public function delete(User $user, Organization $organization): bool
{
return MembershipGate::for($user)->isOwner($organization);
}
public function view(User $user, Project $project): bool
{
return MembershipGate::for($user)->isMemberOf($project);
}
// Check a specific role
MembershipGate::for($user)->hasRole($project, 'editor');
use Vimatech\Membership\Concerns\HasMembers;
use Vimatech\Membership\Concerns\HasMemberships;
use Vimatech\Membership\Contracts\MembershipRole;
// 1. Define your models
class Organization extends Model
{
use HasMembers;
}
class User extends Authenticatable
{
use HasMemberships;
}
// 2. Define your roles
enum OrganizationRole: string implements MembershipRole
{
case Owner = 'owner';
case Admin = 'admin';
case Member = 'member';
public function level(): int
{
return match ($this) {
self::Owner => 100,
self::Admin => 50,
self::Member => 10,
};
}
public function label(): string
{
return $this->name;
}
}
// 3. Use it
$organization = Organization::create(['name' => 'Vimatech']);
$user = User::create(['name' => 'Adel']);
$organization->addMember($user, OrganizationRole::Owner);
$user->isMemberOf($organization); // true
$user->hasRole($organization, OrganizationRole::Owner); // true
$user->hasRoleAtLeast($organization, OrganizationRole::Admin); // true
$organization->isAdmin($user); // true (owner is admin)
$organization->owners(); // Collection with $user