1. Go to this page and download the library: Download hasinhayder/tyro 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/ */
hasinhayder / tyro example snippets
namespace App\Models;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Laravel\Sanctum\HasApiTokens;
use HasinHayder\Tyro\Concerns\HasTyroRoles;
class User extends Authenticatable
{
use HasApiTokens, HasTyroRoles;
}
// In a controller, service, or anywhere you have the user
$user = auth()->user();
// Check single role
if ($user->hasRole('admin')) {
// User is an admin
}
// Check multiple roles (user must have ALL)
if ($user->hasRoles(['admin', 'super-admin'])) {
// User has both roles
}
// Get all role slugs
$roles = $user->tyroRoleSlugs(); // ['admin', 'editor']
$user = auth()->user();
// Check single privilege (uses Laravel's can() method)
if ($user->can('reports.run')) {
// User has the reports.run privilege
}
// Check multiple privileges (user must have ALL)
if ($user->hasPrivileges(['reports.run', 'billing.view'])) {
// User has both privileges
}
// Get all privilege slugs
$privileges = $user->tyroPrivilegeSlugs(); // ['reports.run', 'billing.view']
use HasinHayder\Tyro\Models\Role;
$user = User::find(1);
// Assign a role
$editorRole = Role::where('slug', 'editor')->first();
$user->assignRole($editorRole);
// Remove a role
$user->removeRole($editorRole);
// Get all roles as Eloquent models
$roles = $user->roles;
use HasinHayder\Tyro\Models\Role;
use HasinHayder\Tyro\Models\Privilege;
$role = Role::where('slug', 'editor')->first();
// Attach privileges to a role
$privilege = Privilege::where('slug', 'reports.run')->first();
$role->privileges()->attach($privilege->id);
// Detach privileges
$role->privileges()->detach($privilege->id);
// Check if role has a privilege
if ($role->hasPrivilege('reports.run')) {
// Role has this privilege
}
$user = User::find(1);
// Suspend user (revokes all tokens automatically)
$user->suspend('Pending account review');
// Check if suspended
if ($user->isSuspended()) {
$reason = $user->getSuspensionReason();
}
// Unsuspend user
$user->unsuspend();
use Illuminate\Support\Facades\Route;
// Require user to be admin
Route::middleware(['auth:sanctum', 'role:admin'])
->get('admin/dashboard', AdminDashboardController::class);
// Allow either editor or admin
Route::middleware(['auth:sanctum', 'roles:editor,admin'])
->post('articles/publish', PublishArticleController::class);
// Require a specific privilege
Route::middleware(['auth:sanctum', 'privilege:reports.run'])
->get('reports', ReportsController::class);
// Allow any of multiple privileges
Route::middleware(['auth:sanctum', 'privileges:billing.view,reports.run'])
->get('dashboard/widgets', DashboardController::class);
// Audit sensitive routes
Route::middleware(['auth:sanctum', 'role:admin', 'tyro.log'])
->delete('users/{user}', [UserController::class, 'destroy']);
public function destroy(User $user, Report $report): bool
{
return $user->hasRole('admin') || $user->can('reports.delete');
}
// Suspend a user (revokes all tokens automatically)
$user->suspend('Pending account review');
// Check if suspended
if ($user->isSuspended()) {
$reason = $user->getSuspensionReason();
}
// Unsuspend
$user->unsuspend();
use Illuminate\Http\Request;
class ProfileController
{
public function __invoke(Request $request)
{
$roleSlugs = $request->user()->tyroRoleSlugs();
// Or eager-load Role models when you need metadata
$roles = $request->user()->roles()->select(['id', 'name', 'slug'])->get();
return response()->json(compact('roleSlugs', 'roles'));
}
}
use Illuminate\Http\Request;
class ApiTokenController
{
public function show(Request $request)
{
$privileges = $request->user()->tyroPrivilegeSlugs();
return response()->json(['privileges' => $privileges]);
}
}
use HasinHayder\Tyro\Models\Role;
use App\Models\User;
class UserRoleController
{
public function assignRoles()
{
$user = User::find(1);
// Assign a single role
$editorRole = Role::where('slug', 'editor')->first();
$user->assignRole($editorRole);
// Assign multiple roles
$adminRole = Role::where('slug', 'admin')->first();
$user->assignRole($adminRole);
// Or use the roles relationship directly
$customerRole = Role::where('slug', 'customer')->first();
$user->roles()->attach($customerRole->id);
}
public function removeRoles()
{
$user = User::find(1);
// Remove a single role
$editorRole = Role::where('slug', 'editor')->first();
$user->removeRole($editorRole);
// Or use the roles relationship directly
$user->roles()->detach($editorRole->id);
// Remove all roles
$user->roles()->detach();
}
}
use HasinHayder\Tyro\Models\Role;
use HasinHayder\Tyro\Models\Privilege;
class RolePrivilegeController
{
public function assignPrivileges()
{
$role = Role::where('slug', 'editor')->first();
// Assign a single privilege
$reportPrivilege = Privilege::where('slug', 'reports.run')->first();
$role->privileges()->attach($reportPrivilege->id);
// Assign multiple privileges at once
$billingPrivilege = Privilege::where('slug', 'billing.view')->first();
$exportPrivilege = Privilege::where('slug', 'reports.export')->first();
$role->privileges()->attach([
$billingPrivilege->id,
$exportPrivilege->id,
]);
// Or sync privileges (replaces all existing privileges)
$role->privileges()->sync([
$reportPrivilege->id,
$billingPrivilege->id,
]);
}
public function removePrivileges()
{
$role = Role::where('slug', 'editor')->first();
// Remove a single privilege
$reportPrivilege = Privilege::where('slug', 'reports.run')->first();
$role->privileges()->detach($reportPrivilege->id);
// Remove multiple privileges
$role->privileges()->detach([
$reportPrivilege->id,
$billingPrivilege->id,
]);
// Remove all privileges from the role
$role->privileges()->detach();
}
}
use HasinHayder\Tyro\Models\Role;
class RolePrivilegesController
{
public function show(Role $role)
{
// Load privileges relationship
$role->loadMissing('privileges:id,name,slug');
return response()->json([
'role' => $role->only(['id', 'name', 'slug']),
'privileges' => $role->privileges,
]);
}
public function getPrivilegeSlugs(Role $role)
{
// Get only the privilege slugs as an array
$privilegeSlugs = $role->privileges()->pluck('slug')->toArray();
return response()->json(['privilege_slugs' => $privilegeSlugs]);
}
}
use HasinHayder\Tyro\Models\Role;
class RoleCheckController
{
public function checkPrivileges()
{
$role = Role::where('slug', 'editor')->first();
// Check if role has a single privilege
if ($role->hasPrivilege('reports.run')) {
// Role has the reports.run privilege
}
// Check if role has ALL specified privileges
if ($role->hasPrivileges(['reports.run', 'billing.view'])) {
// Role has both reports.run AND billing.view privileges
}
// Check if role has ANY of the specified privileges
$hasAny = $role->privileges()
->whereIn('slug', ['reports.run', 'billing.view'])
->exists();
}
}
use Illuminate\Http\Request;
class ArticleController
{
public function store(Request $request)
{
if (! $request->user()->hasRoles(['editor', 'admin'])) {
abort(403, 'Editors or admins only.');
}
// Create the article
}
public function destroy(Request $request)
{
if (! $request->user()->hasRole('super-admin')) {
abort(403, 'Super admins only.');
}
// Delete the article
}
}
use Illuminate\Http\Request;
class BillingReportController
{
public function index(Request $request)
{
if (! $request->user()->hasPrivileges(['reports.run', 'billing.view'])) {
abort(403, 'Missing reporting privileges.');
}
// Build the report
}
public function export(Request $request)
{
if (! $request->user()->can('reports.export')) {
abort(403, 'Missing export privilege.');
}
// Return the file download
}
}
use Illuminate\Http\Request;
class LoginStatusController
{
public function __invoke(Request $request)
{
$user = $request->user();
if ($user->isSuspended()) {
return response()->json([
'suspended' => true,
'reason' => $user->getSuspensionReason(),
], 423);
}
return response()->json(['suspended' => false]);
}
}