Skip to content

Commit 8a97e76

Browse files
authored
Merge pull request #32 from t3rminalV/manager-role
Manager Role
2 parents c4327ad + 7037096 commit 8a97e76

File tree

15 files changed

+560
-460
lines changed

15 files changed

+560
-460
lines changed

app/Http/Controllers/SeatingPlanController.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ class SeatingPlanController extends Controller
1212
public function index(Request $request)
1313
{
1414
$query = Event::query();
15-
if (!$request->user()->hasRole('admin')) {
15+
if (!$request->user()->hasAnyRole(['admin','manager'])) {
1616
$query = $query->whereDraft(false);
1717
}
1818
$events = $query->orderBy('starts_at', 'DESC')->with('seatingPlans')->paginate();

app/Models/SeatingPlan.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,7 @@ public function getData(): Collection
8181
'description' => $seat->description,
8282
'nickname' => $seat->ticket->user->nickname ?? null,
8383
'original_email' => $seat->ticket->original_email ?? null,
84+
'external_id' => $seat->ticket->external_id ?? null,
8485
'ticket' => $seat->ticket->type->name ?? null,
8586
'ticketId' => $seat->ticket->id ?? null,
8687
'clans' => $clans,

app/Models/User.php

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,18 @@ public function hasRole(string|Role $role): bool
6060
return (bool)$this->roles()->whereCode($role)->count();
6161
}
6262

63+
public function hasAnyRole(array $roles): bool
64+
{
65+
foreach ($roles as $role) {
66+
if ($role instanceof Role) {
67+
$role = $role->code;
68+
}
69+
if ($this->roles()->whereCode($role)->count())
70+
return true;
71+
}
72+
return false;
73+
}
74+
6375
public function roles(): BelongsToMany
6476
{
6577
return $this->belongsToMany(Role::class);

app/Policies/EventPolicy.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,6 @@ public function see(User $user, Event $event): bool
1313
if (!$event->draft) {
1414
return true;
1515
}
16-
return $user->hasRole('admin');
16+
return $user->hasAnyRole(['admin', 'manager']);
1717
}
1818
}

app/Providers/AuthServiceProvider.php

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,5 +28,11 @@ public function boot(): void
2828
Gate::define('viewPulse', function (User $user) {
2929
return $user->hasRole('admin');
3030
});
31+
Gate::define('manager', function (User $user) {
32+
return $user->hasRole('manager');
33+
});
34+
Gate::define('anyPrivilegedRole', function (User $user) {
35+
return $user->hasRole('manager') || $user->hasRole('admin');
36+
});
3137
}
3238
}

database/seeders/RolesSeeder.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ public function run(): void
1515
{
1616
$roles = [
1717
'admin' => 'Admin',
18+
'manager' => 'Manager'
1819
];
1920

2021
foreach ($roles as $code => $name) {

resources/views/admin/clans/index.blade.php

Lines changed: 17 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -32,11 +32,12 @@
3232
'name' => 'Code',
3333
'property' => 'code',
3434
])
35-
@include('partials._searchtextfield', [
36-
'name' => 'Invite Code',
37-
'property' => 'invite_code',
38-
])
39-
35+
@can('admin')
36+
@include('partials._searchtextfield', [
37+
'name' => 'Invite Code',
38+
'property' => 'invite_code',
39+
])
40+
@endcan
4041
</div>
4142
<div class="card-footer d-flex">
4243
<button class="btn btn-primary ms-auto" type="submit">Search</button>
@@ -74,12 +75,14 @@
7475
'field' => 'members_count',
7576
])
7677
</th>
77-
<th>
78-
@include('partials._sortheader', [
79-
'title' => 'Invitation Code',
80-
'field' => 'invite_code',
81-
])
82-
</th>
78+
@can('admin')
79+
<th>
80+
@include('partials._sortheader', [
81+
'title' => 'Invitation Code',
82+
'field' => 'invite_code',
83+
])
84+
</th>
85+
@endcan
8386
<th>
8487
@include('partials._sortheader', [
8588
'title' => 'Created',
@@ -100,7 +103,9 @@
100103
</td>
101104
<td>{{ $clan->code }}</td>
102105
<td>{{ $clan->members_count }}</td>
103-
<td><span class="user-select-all">{{ $clan->invite_code }}</span></td>
106+
@can('admin')
107+
<td><span class="user-select-all">{{ $clan->invite_code }}</span></td>
108+
@endcan
104109
<td>
105110
<span title="{{ $clan->created_at->format('Y-m-d H:i:s') }}">
106111
{{ $clan->created_at->diffForHumans() }}

resources/views/admin/clans/show.blade.php

Lines changed: 37 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -30,11 +30,13 @@
3030
<div class="datagrid-title">Code</div>
3131
<div class="datagrid-content">{{ $clan->code }}</div>
3232
</div>
33-
<div class="datagrid-item">
34-
<div class="datagrid-title">Invite Code</div>
35-
<div class="datagrid-content"><span class="user-select-all">{{ $clan->invite_code }}</span>
33+
@can('admin')
34+
<div class="datagrid-item">
35+
<div class="datagrid-title">Invite Code</div>
36+
<div class="datagrid-content"><span class="user-select-all">{{ $clan->invite_code }}</span>
37+
</div>
3638
</div>
37-
</div>
39+
@endcan
3840
<div class="datagrid-item">
3941
<div class="datagrid-title">Created</div>
4042
<div class="datagrid-content">
@@ -45,21 +47,23 @@
4547
</div>
4648
</div>
4749
</div>
48-
<div class="card-footer align-content-end d-flex btn-list">
49-
<a href="{{ route('admin.clans.delete', $clan->code) }}" class="btn btn-outline-danger">
50-
<i class="icon ti ti-trash"></i>
51-
Delete
52-
</a>
53-
<a href="{{ route('admin.clans.regenerate', $clan->code) }}"
54-
class="btn btn-primary-outline ms-auto">
55-
<i class="icon ti ti-refresh"></i>
56-
Generate New Invite Code
57-
</a>
58-
<a href="{{ route('admin.clans.edit', $clan->code) }}" class="btn btn-primary">
59-
<i class="icon ti ti-edit"></i>
60-
Edit
61-
</a>
62-
</div>
50+
@can('admin')
51+
<div class="card-footer align-content-end d-flex btn-list">
52+
<a href="{{ route('admin.clans.delete', $clan->code) }}" class="btn btn-outline-danger">
53+
<i class="icon ti ti-trash"></i>
54+
Delete
55+
</a>
56+
<a href="{{ route('admin.clans.regenerate', $clan->code) }}"
57+
class="btn btn-primary-outline ms-auto">
58+
<i class="icon ti ti-refresh"></i>
59+
Generate New Invite Code
60+
</a>
61+
<a href="{{ route('admin.clans.edit', $clan->code) }}" class="btn btn-primary">
62+
<i class="icon ti ti-edit"></i>
63+
Edit
64+
</a>
65+
</div>
66+
@endcan
6367
</div>
6468
</div>
6569
</div>
@@ -113,18 +117,20 @@ class="btn btn-primary-outline ms-auto">
113117
{{ $member->created_at->diffForHumans() }}
114118
</span>
115119
</td>
116-
<td class="btn-list">
117-
<a class="btn btn-outline-primary ms-auto"
118-
href="{{ route('admin.clans.members.edit', [$clan->code, $member->id]) }}">
119-
<i class="icon ti ti-edit"></i>
120-
Edit
121-
</a>
122-
<a class="btn btn-outline-danger @if(!$member->canDelete()) disabled @endif"
123-
@if ($member->canDelete()) href="{{ route('admin.clans.members.delete', [$clan->code, $member->id]) }}" @endif>
124-
<i class="icon ti ti-trash"></i>
125-
Remove
126-
</a>
127-
</td>
120+
@can('admin')
121+
<td class="btn-list">
122+
<a class="btn btn-outline-primary ms-auto"
123+
href="{{ route('admin.clans.members.edit', [$clan->code, $member->id]) }}">
124+
<i class="icon ti ti-edit"></i>
125+
Edit
126+
</a>
127+
<a class="btn btn-outline-danger @if(!$member->canDelete()) disabled @endif"
128+
@if ($member->canDelete()) href="{{ route('admin.clans.members.delete', [$clan->code, $member->id]) }}" @endif>
129+
<i class="icon ti ti-trash"></i>
130+
Remove
131+
</a>
132+
</td>
133+
@endcan
128134
</tr>
129135

130136
@empty

resources/views/admin/events/index.blade.php

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -13,14 +13,16 @@
1313
<div class="col page-header mt-2">
1414
<h1>Events</h1>
1515
</div>
16-
<div class="col-auto ms-auto d-print-none">
17-
<div class="btn-list">
18-
<a href="{{ route('admin.events.create') }}" class="btn btn-primary d-inline-block">
19-
<i class="icon ti ti-plus"></i>
20-
Create Event
21-
</a>
16+
@can('admin')
17+
<div class="col-auto ms-auto d-print-none">
18+
<div class="btn-list">
19+
<a href="{{ route('admin.events.create') }}" class="btn btn-primary d-inline-block">
20+
<i class="icon ti ti-plus"></i>
21+
Create Event
22+
</a>
23+
</div>
2224
</div>
23-
</div>
25+
@endcan
2426
</div>
2527
<div class="row">
2628
<div class="col-md-12 col-lg-3 mb-4">

resources/views/admin/events/seats.blade.php

Lines changed: 20 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,11 @@
1414

1515
@if ($currentTicket)
1616
<p>
17-
Choose a seat for <strong>{{ $currentTicket->user->nickname ?? $currentTicket->original_email }}</strong>.
17+
@can('admin')
18+
Choose a seat for <strong>{{ $currentTicket->user->nickname ?? $currentTicket->original_email }}</strong>.
19+
@else
20+
Choose a seat for <strong>{{ $currentTicket->user->nickname ?? $currentTicket->external_id }}</strong>.
21+
@endcan
1822
</p>
1923
@else
2024
<p>
@@ -27,7 +31,11 @@
2731
@if($currentTicket)
2832
<div class="card mb-4">
2933
<div class="card-body">
30-
<h3 class="card-title">{{ $currentTicket->user->nickname ?? $currentTicket->original_email }}</h3>
34+
@can('admin')
35+
<h3 class="card-title">{{ $currentTicket->user->nickname ?? $currentTicket->original_email }}</h3>
36+
@else
37+
<h3 class="card-title">{{ $currentTicket->user->nickname ?? $currentTicket->external_id }}</h3>
38+
@endcan
3139
@if($currentTicket->user && $currentTicket->user->clanMemberships)
3240
<p class="card-subtitle">
3341

@@ -86,7 +94,12 @@ class="btn btn-primary-outline ms-auto">
8694
@foreach($tickets as $ticket)
8795
<li class="my-1">
8896
<a href="{{ route('admin.events.seats', ['event' => $event, 'ticket_id' => $ticket->id]) }}">
89-
{{ $ticket->user->nickname ?? $ticket->original_email }}</a>
97+
@can('admin')
98+
{{ $ticket->user->nickname ?? $ticket->original_email }}
99+
@else
100+
{{ $ticket->user->nickname ?? $ticket->external_id }}
101+
@endcan
102+
</a>
90103
<span class="badge-list">
91104
@if ($ticket->user)
92105
@foreach($ticket->user->clanMemberships as $clanMember)
@@ -149,7 +162,10 @@ class="badge bg-muted text-muted-fg">{{ $clanMember->clan->name }}</span>
149162
}
150163
if ($seat->ticket) {
151164
$class = 'taken';
152-
$name = $seat->original_email;
165+
if(Request::user()->hasRole('admin'))
166+
$name = $seat->original_email;
167+
else
168+
$name = $seat->external_id;
153169
}
154170
if ($seat->nickname) {
155171
$name = $seat->nickname;

0 commit comments

Comments
 (0)