<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
squareetlabs / laravel-teams-permissions example snippets
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
use Squareetlabs\LaravelTeamsPermissions\Traits\HasTeams;
class User extends Model
{
use HasTeams;
// ... rest of your code
}
// Add role with permissions
$team->addRole('admin', [
'posts.*',
'users.*',
'settings.edit',
], 'Administrator', 'Role with all permissions');
$team->addRole('editor', [
'posts.view',
'posts.create',
'posts.edit',
], 'Editor', 'Can manage posts');
// Add user with a role
$team->addUser($user, 'editor');
// Update user's role
$team->updateUser($user, 'admin');
// Remove user
$team->deleteUser($user);
// Check if user has a permission
if ($user->hasTeamPermission($team, 'posts.create')) {
// User can create posts
}
// Check if user has a role
if ($user->hasTeamRole($team, 'admin')) {
// User is admin
}
// Check specific ability on an entity
if ($user->hasTeamAbility($team, 'edit', $post)) {
// User can edit this specific post
}
// Access the team's owner
$team->owner
// Get all team users (excluding owner)
$team->users()
// Get all users including owner
$team->allUsers()
// Check if a user belongs to the team
$team->hasUser($user)
// Add user with a role (by ID or code)
$team->addUser($user, 'admin')
// Update user's role
$team->updateUser($user, 'editor')
// Remove user from team
$team->deleteUser($user)
// Invite user by email
$team->inviteUser('[email protected]', 'member')
// Accept invitation
$team->inviteAccept($invitation_id)
// Get all team abilities
$team->abilities()
// Get all team roles
$team->roles()
// Get user's role in the team
$team->userRole($user)
// Check if team has a role
$team->hasRole('admin') // or null to check if has any role
// Get role by ID or code
$team->getRole('admin')
// Add new role
$team->addRole($code, $permissions, $name, $description)
// Update role
$team->updateRole('admin', $newPermissions, $name, $description)
// Delete role
$team->deleteRole('admin')
// Get all groups
$team->groups()
// Get group by ID or code
$team->getGroup('moderators')
// Add new group
$team->addGroup($code, $permissions, $name)
// Update group
$team->updateGroup('moderators', $newPermissions, $name)
// Delete group
$team->deleteGroup('moderators')
// Check if team has user with email
$team->hasUserWithEmail('[email protected]')
// Check if user has permission in team
$team->userHasPermission($user, 'posts.create', $
// Get teams the user belongs to
$user->teams
// Get teams the user owns
$user->ownedTeams
// Get all teams (owned and belongs to)
$user->allTeams()
// Check if user owns a team
$user->ownsTeam($team)
// Check if user belongs to a team
$user->belongsToTeam($team)
// Get user's role in a team
$user->teamRole($team)
// Check if user has a role (or roles) in a team
// $ue: all permissions are n an entity
$user->hasTeamAbility($team, 'edit', $post)
// Allow ability for user on an entity
$user->allowTeamAbility($team, 'edit', $post)
// Forbid ability for user on an entity
$user->forbidTeamAbility($team, 'edit', $post)
// Delete ability
$user->deleteTeamAbility($team, 'edit', $post)
// Scope for eager loading permissions
User::withTeamPermissions()->get()
$team->addRole('admin', [
'posts.*', // All post permissions
'users.view', // View users
'users.create', // Create users
'users.edit', // Edit users
'users.delete', // Delete users
'settings.*', // All settings permissions
], 'Administrator', 'Role with full access');
// Check simple permission
if ($user->hasTeamPermission($team, 'posts.create')) {
// User can create posts
}
// Check multiple permissions (OR)
if ($user->hasTeamPermission($team, ['posts.create', 'posts.edit'], false)) {
// User can create OR edit posts
}
// Check multiple permissions (AND)
if ($user->hasTeamPermission($team, ['posts.create', 'posts.edit'], true)) {
// User can create AND edit posts
}
// Allow user to edit a specific post
$user->allowTeamAbility($team, 'edit', $post);
// Forbid user to edit a specific post
$user->forbidTeamAbility($team, 'edit', $post);
if ($user->hasTeamAbility($team, 'edit', $post)) {
// User can edit this specific post
}
// Add group
$team->addGroup('moderators', [
'posts.moderate',
'comments.moderate',
], 'Moderators');
// Update group
$team->updateGroup('moderators', [
'posts.moderate',
'comments.moderate',
'users.moderate',
], 'Moderators');
// Delete group
$team->deleteGroup('moderators');
// Get group
$group = $team->getGroup('moderators');
// Add users to group
$group->users()->attach($user);
// or multiple users
$group->users()->attach([$user1->id, $user2->id]);
// Remove users from group
$group->users()->detach($user);
// User must have admin OR root
Route::middleware(['role:admin|root,team_id'])->group(function () {
// ...
});
// User must have admin AND editor
Route::middleware(['role:admin|editor,team_id,
namespace App\Policies;
use App\Models\Post;
use Squareetlabs\LaravelTeamsPermissions\Policies\TeamPolicy;
class PostPolicy extends TeamPolicy
{
public function view(User $user, Post $post): bool
{
$team = $this->getTeamFromModel($post);
return $this->checkTeamPermission($user, $team, 'posts.view');
}
public function update(User $user, Post $post): bool
{
$team = $this->getTeamFromModel($post);
return $this->checkTeamAbility($user, $team, 'posts.update', $post);
}
}
// In a controller
if ($user->can('view', $post)) {
// User can view the post
}
// In a view
@can('update', $post)
<button>Edit</button>
@endcan
// In your frontend application
axios.get('/api/teams', {
headers: {
'Authorization': 'Bearer ' + token
}
});
use Squareetlabs\LaravelTeamsPermissions\Support\Services\PermissionCache;
$cache = new PermissionCache();
$cache->flush();
use Squareetlabs\LaravelTeamsPermissions\Models\TeamAuditLog;
// Get logs for a team
$logs = TeamAuditLog::where('team_id', $team->id)->get();
// Get logs for a user
$logs = TeamAuditLog::where('user_id', $user->id)->get();
// Get logs for a specific action
$logs = TeamAuditLog::where('action', 'team_member_added')->get();
use Squareetlabs\LaravelTeamsPermissions\Events\TeamMemberAdded;
use Squareetlabs\LaravelTeamsPermissions\Events\TeamMemberRemoved;
Event::listen(TeamMemberAdded::class, function ($team, $user) {
// Notify user they were added
});
Event::listen(TeamMemberRemoved::class, function ($team, $user) {
// Notify user they were removed
});
use Squareetlabs\LaravelTeamsPermissions\Rules\ValidPermission;
$request->validate([
'permission' => ['
// Create team
$team = Team::create([
'name' => 'Blog Team',
'user_id' => auth()->id(),
]);
// Add roles
$team->addRole('editor', ['posts.*', 'comments.moderate'], 'Editor');
$team->addRole('author', ['posts.create', 'posts.edit'], 'Author');
$team->addRole('viewer', ['posts.view'], 'Viewer');
// In a controller
public function store(Request $request)
{
$team = Team::find($request->team_id);
if (!auth()->user()->hasTeamPermission($team, 'posts.create')) {
abort(403);
}
// Create post...
}
// Each client has their own team
$clientTeam = Team::create([
'name' => $client->name,
'user_id' => $client->owner_id,
]);
// Client-specific roles
$clientTeam->addRole('admin', ['*'], 'Administrator');
$clientTeam->addRole('user', ['dashboard.view', 'reports.view'], 'User');
// Check access in middleware
Route::middleware(['permission:dashboard.view,team_id'])->group(function () {
Route::get('/dashboard', [DashboardController::class, 'index']);
});
use Squareetlabs\LaravelTeamsPermissions\Database\Factories\TeamFactory;
$team = TeamFactory::new()
->withRoles()
->withGroups()
->create();
bash
# List all teams
php artisan teams:list
# View team details
php artisan teams:show {team}
# View team permissions
php artisan teams:permissions {team}
# Add member to team
php artisan teams:add-member {team} {user} {role}
bash
# Sync permissions from configuration
php artisan teams:sync-permissions
# Export team permissions
php artisan teams:export-permissions {team} --format=json
# Import permissions to team
php artisan teams:import-permissions {team} --file=permissions.json