Add developper role
This commit is contained in:
parent
3b0dade346
commit
4e3a1635ee
17 changed files with 61 additions and 42 deletions
|
|
@ -52,16 +52,6 @@ class CreateUser extends Command
|
|||
$user->role = Role::admin();
|
||||
} else {
|
||||
$user->role = Role::client();
|
||||
try {
|
||||
$project = Project::where(
|
||||
'id',
|
||||
$this->ask("What's the id of the project (s)he's working on?")
|
||||
)->firstOrFail();
|
||||
$user->projects()->sync([$project->id]);
|
||||
} catch (ModelNotFoundException $e) {
|
||||
$this->error('The project does not exists');
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
$user->password = Hash::make($pwd);
|
||||
$user->save();
|
||||
|
|
|
|||
|
|
@ -5,6 +5,7 @@ namespace App\Enums;
|
|||
use Kwaadpepper\Enum\BaseEnum;
|
||||
|
||||
/**
|
||||
* @method static self developper()
|
||||
* @method static self admin()
|
||||
* @method static self client()
|
||||
*/
|
||||
|
|
@ -14,6 +15,7 @@ class Role extends BaseEnum
|
|||
protected static function values(): array
|
||||
{
|
||||
return [
|
||||
'developper' => 0,
|
||||
'admin' => 1,
|
||||
'client' => 2
|
||||
];
|
||||
|
|
@ -22,6 +24,7 @@ class Role extends BaseEnum
|
|||
protected static function labels(): array
|
||||
{
|
||||
return [
|
||||
'developper' => trans('Developpeur'),
|
||||
'admin' => trans('Administrateur'),
|
||||
'client' => trans('Client')
|
||||
];
|
||||
|
|
|
|||
|
|
@ -36,7 +36,7 @@ class TicketController extends Controller
|
|||
/** @var \App\Models\User */
|
||||
$user = auth()->user();
|
||||
$tickets = Ticket::with('project')->has('project');
|
||||
if (!$user->role->equals(Role::admin())) {
|
||||
if (!$user->isAdmin()) {
|
||||
$tickets = $tickets->whereHas('project', function ($q) use ($user) {
|
||||
$q->whereHas('users', function ($q) use ($user) {
|
||||
$q->whereId($user->id);
|
||||
|
|
|
|||
|
|
@ -5,7 +5,6 @@ namespace App\Http\Middleware;
|
|||
use App\Enums\Role;
|
||||
use Closure;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\Auth;
|
||||
|
||||
class IsAdmin
|
||||
{
|
||||
|
|
@ -18,7 +17,9 @@ class IsAdmin
|
|||
*/
|
||||
public function handle(Request $request, Closure $next)
|
||||
{
|
||||
if (Auth::user()->role->equals(Role::admin())) {
|
||||
/** @var \App\Models\User */
|
||||
$user = auth()->user();
|
||||
if ($user->isAdmin()) {
|
||||
return $next($request);
|
||||
}
|
||||
return redirect()->route('home');
|
||||
|
|
|
|||
|
|
@ -15,8 +15,9 @@ class ChangeTicketStatus extends FormRequest
|
|||
*/
|
||||
public function authorize()
|
||||
{
|
||||
return auth()->check() and
|
||||
auth()->user()->role->equals(Role::admin());
|
||||
/** @var \App\Models\User */
|
||||
$user = auth()->user();
|
||||
return auth()->check() and $user->isAdmin();
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -14,10 +14,12 @@ class CreateMessage extends FormRequest
|
|||
*/
|
||||
public function authorize()
|
||||
{
|
||||
/** @var \App\Models\User */
|
||||
$user = auth()->user();
|
||||
$this->merge([
|
||||
'subscribe' => $this->subscribe ? true : false
|
||||
]);
|
||||
return auth()->check() and (auth()->user()->role->equals(Role::admin()) or
|
||||
return auth()->check() and ($user->isAdmin() or
|
||||
auth()->user()->projects->contains(request()->route()->ticket->project_id));
|
||||
}
|
||||
|
||||
|
|
@ -28,9 +30,11 @@ class CreateMessage extends FormRequest
|
|||
*/
|
||||
public function rules()
|
||||
{
|
||||
/** @var \App\Models\User */
|
||||
$user = auth()->user();
|
||||
return [
|
||||
'subscribe' => 'required|boolean',
|
||||
'message' => 'required|min:' . (auth()->user()->role->equals(Role::admin()) ? '5' : '20'),
|
||||
'message' => 'required|min:' . ($user->isAdmin() ? '5' : '20'),
|
||||
'file_message' => 'sometimes|mimes:jpeg,jpg,png,pdf|max:2048'
|
||||
];
|
||||
}
|
||||
|
|
|
|||
|
|
@ -14,8 +14,9 @@ class StoreProject extends FormRequest
|
|||
*/
|
||||
public function authorize()
|
||||
{
|
||||
return auth()->check() and
|
||||
auth()->user()->role->equals(Role::admin());
|
||||
/** @var \App\Models\User */
|
||||
$user = auth()->user();
|
||||
return auth()->check() and $user->isAdmin();
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -16,7 +16,9 @@ class StoreTicket extends FormRequest
|
|||
*/
|
||||
public function authorize()
|
||||
{
|
||||
if (!auth()->user()->role->equals(Role::admin())) {
|
||||
/** @var \App\Models\User */
|
||||
$user = auth()->user();
|
||||
if (!$user->isAdmin()) {
|
||||
$this->merge([
|
||||
'status' => TicketStatus::new()->value,
|
||||
]);
|
||||
|
|
@ -37,12 +39,14 @@ class StoreTicket extends FormRequest
|
|||
'exists:projects,id',
|
||||
// @phpcs:ignore Generic.CodeAnalysis.UnusedFunctionParameter.FoundInExtendedClassBeforeLastUsed
|
||||
function ($attribute, $value, $fail) {
|
||||
if (auth()->user()->role->equals(Role::admin())) {
|
||||
/** @var \App\Models\User */
|
||||
$user = auth()->user();
|
||||
if ($user->isAdmin()) {
|
||||
return;
|
||||
}
|
||||
if (!in_array($value, auth()->user()->projects()->pluck('id')->all())) {
|
||||
if (!in_array($value, $user->projects()->pluck('id')->all())) {
|
||||
$fail(__('Veuillez choisir entre :values', [
|
||||
'values' => auth()->user()->projects()->pluck('name')->implode(',')
|
||||
'values' => $user->projects()->pluck('name')->implode(',')
|
||||
]));
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -9,12 +9,14 @@ class UpdateTicket extends StoreTicket
|
|||
{
|
||||
public function authorize()
|
||||
{
|
||||
if (!auth()->user()->role->equals(Role::admin())) {
|
||||
/** @var \App\Models\User */
|
||||
$user = auth()->user();
|
||||
if (!$user->isAdmin()) {
|
||||
$this->merge([
|
||||
'status' => $this->project->status->value,
|
||||
]);
|
||||
}
|
||||
return auth()->check() and (auth()->user()->role->equals(Role::admin()) or
|
||||
return auth()->check() and ($user->isAdmin() or
|
||||
request()->route()->ticket->created_by === auth()->user()->id);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -48,7 +48,8 @@ class Message extends Model
|
|||
->where(function ($q) use ($ticket) {
|
||||
$q->whereHas('projects', function ($q) use ($ticket) {
|
||||
$q->where('id', $ticket->project->id);
|
||||
})->orWhere('role', Role::admin()->value);
|
||||
})->orWhere('role', Role::admin()->value)
|
||||
->orWhere('role', Role::developper()->value);
|
||||
})->firstOrFail();
|
||||
$usersNotified->add($user);
|
||||
SendTicketMentionMail::dispatchAfterResponse(
|
||||
|
|
|
|||
|
|
@ -50,7 +50,9 @@ class Project extends Model
|
|||
'belongsToManyLabel' => 'name',
|
||||
'nullable' => true,
|
||||
'readonly' => function () {
|
||||
return auth()->user()->role->equals(Role::admin()) ? false : true;
|
||||
/** @var \App\Models\User */
|
||||
$user = auth()->user();
|
||||
return $user->isAdmin();
|
||||
},
|
||||
'actions' => [
|
||||
CrudAction::viewAny(),
|
||||
|
|
|
|||
|
|
@ -130,7 +130,9 @@ class User extends Authenticatable
|
|||
'belongsToManyLabel' => 'name',
|
||||
'nullable' => true,
|
||||
'readonly' => function () {
|
||||
return auth()->user()->role->equals(Role::admin()) ? false : true;
|
||||
/** @var \App\Models\User */
|
||||
$user = auth()->user();
|
||||
return $user->isAdmin();
|
||||
},
|
||||
'actions' => [
|
||||
CrudAction::viewAny(),
|
||||
|
|
@ -185,4 +187,15 @@ class User extends Authenticatable
|
|||
{
|
||||
dispatch(new SendUserCreatedEmail($this));
|
||||
}
|
||||
|
||||
/**
|
||||
* Is the user an admin or a developper ?
|
||||
*
|
||||
* @return boolean
|
||||
*/
|
||||
public function isAdmin(): bool
|
||||
{
|
||||
return ($this->role->equals(Role::developper()) or
|
||||
$this->role->equals(Role::admin()));
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -15,6 +15,6 @@ abstract class UserRoleRules extends StaticRules
|
|||
|
||||
protected static function userIsAdmin(User $user)
|
||||
{
|
||||
return $user->role->equals(Role::admin());
|
||||
return $user->isAdmin();
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -60,7 +60,7 @@ class TicketPolicy
|
|||
*/
|
||||
public function update(User $user, Ticket $ticket)
|
||||
{
|
||||
return Auth::user()->role->equals(Role::admin()) or $user->projects->contains($ticket->project_id);
|
||||
return $user->isAdmin() or $user->projects->contains($ticket->project_id);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -85,7 +85,7 @@ class TicketPolicy
|
|||
*/
|
||||
public function restore(User $user, Ticket $ticket)
|
||||
{
|
||||
return Auth::user()->role->equals(Role::admin()) or $user->projects->contains($ticket->project_id);
|
||||
return $user->isAdmin() or $user->projects->contains($ticket->project_id);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -103,7 +103,9 @@ class TicketPolicy
|
|||
|
||||
public function changeStatus(User $user)
|
||||
{
|
||||
return $user->role->equals(Role::admin());
|
||||
/** @var \App\Models\User */
|
||||
$user = auth()->user();
|
||||
return $user->isAdmin();
|
||||
}
|
||||
|
||||
// phpcs:ignore Generic.CodeAnalysis.UnusedFunctionParameter.FoundBeforeLastUsed
|
||||
|
|
@ -119,12 +121,7 @@ class TicketPolicy
|
|||
//role == 1
|
||||
// OR project_id IN user->projects
|
||||
|
||||
if (
|
||||
!(
|
||||
$user->role->equals(Role::admin())
|
||||
or $user->projects->contains($ticket->project_id) )
|
||||
)
|
||||
{
|
||||
if (!($user->isAdmin() or $user->projects->contains($ticket->project_id))) {
|
||||
return Response::deny(trans('Vous ne pouvez modifier un ticket qui ne vous appartient pas.'));
|
||||
}
|
||||
return $ticket->status->equals(TicketStatus::archived()) ?
|
||||
|
|
|
|||
|
|
@ -24,7 +24,7 @@
|
|||
</a>
|
||||
@auth
|
||||
<div class="collapse navbar-collapse" id="navbarSupportedContent">
|
||||
@if (Auth::user()->role->equals(Role::admin()))
|
||||
@if (Auth::user()->isAdmin())
|
||||
<ul class="navbar-nav me-auto">
|
||||
<li class="nav-item">
|
||||
<a class="nav-link @if(strpos(request()->route()->getName(), 'ticket') === 0)active @endif" href="{{ route('ticket.index') }}">Tickets</a>
|
||||
|
|
|
|||
|
|
@ -7,7 +7,7 @@ $userPr = Auth::user()->projects ?? collect([]);
|
|||
<label for="project" class="col-form-label">{{ __('Projet') }}</label>
|
||||
<select class="form-select" name="project_id" id="project">
|
||||
@foreach($projects as $project)
|
||||
@if (Auth::user()->role->equals(Role::admin()))
|
||||
@if (Auth::user()->isAdmin())
|
||||
<option value="{{ $project->id }}" @if ($project->id == old('project_id') or (isset($ticket) and $ticket->project->id == $project->id))selected @endif>{{ $project->name }}</option>
|
||||
@elseif ($userPr->filter(function($pr) use($project) { return $pr->id === $project->id; })->count())
|
||||
<option value="{{ $project->id }}" selected>{{ $project->name }}</option>
|
||||
|
|
|
|||
|
|
@ -23,7 +23,7 @@ $userPr = Auth::user()->projects ?? collect([]);
|
|||
<select class="form-select" onchange="window.location='{{ route('ticket.index') }}?'+(this.value == -1 ? 'prs=-1' : 'pr='+this.value);">
|
||||
<option value="-1">{{ __('Tous') }}</option>
|
||||
@foreach($projects as $project)
|
||||
@if (Auth::user()->role->equals(Role::admin()))
|
||||
@if (Auth::user()->isAdmin())
|
||||
<option value="{{ $project->id }}" @if(intval(session('tickets.pr')) == $project->id)selected="selected" @endif>{{ $project->name }}</option>
|
||||
@elseif ($userPr->filter(function($pr) use($project) { return $pr->id === $project->id; })->count())
|
||||
<option value="{{ $project->id }}" @if(intval(session('tickets.pr')) == $project->id)selected="selected" @endif>{{ $project->name }}</option>
|
||||
|
|
@ -146,7 +146,7 @@ $userPr = Auth::user()->projects ?? collect([]);
|
|||
</td>
|
||||
<td>
|
||||
<a href="{{ route('ticket.show', $ticket->id) }}" class="btn btn-sm btn-outline-success">{{ __('Messages') }}</a>
|
||||
@if(auth()->user()->role->equals(Role::admin()))
|
||||
@if(auth()->user()->isAdmin())
|
||||
<a href="{{ route('ticket.edit', $ticket) }}" class="btn btn-sm btn-outline-primary">{{ __('Modifier') }}</a>
|
||||
@endif
|
||||
@can('delete', $ticket)
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue