| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156 |
- {{-- Вьюха: Управление ролью и правами пользователя --}}
- @extends('admin.layout')
- @section('title', 'Права: ' . $user->name)
- @section('content_header')
- <div class="d-flex justify-content-between align-items-center">
- <h1 class="m-0">
- Права пользователя: <strong>{{ $user->name }}</strong>
- @if($user->role)
- @php $b = $user->roleBadge(); @endphp
- <span class="badge badge-{{ $b['color'] }} ml-2">{{ $b['label'] }}</span>
- @endif
- </h1>
- <a href="{{ route('admin.users.index') }}" class="btn btn-default btn-sm">
- <i class="fas fa-arrow-left"></i> Назад
- </a>
- </div>
- @stop
- @section('breadcrumb')
- <li class="breadcrumb-item"><a href="{{ route('admin.dashboard') }}">Главная</a></li>
- <li class="breadcrumb-item"><a href="{{ route('admin.users.index') }}">Пользователи</a></li>
- <li class="breadcrumb-item active">{{ $user->name }}</li>
- @stop
- @section('content')
- <form action="{{ route('admin.users.update', $user) }}" method="POST">
- @csrf @method('PUT')
- <div class="row">
- <div class="col-md-4">
- <div class="card card-primary card-outline">
- <div class="card-header"><h3 class="card-title">Роль</h3></div>
- <div class="card-body">
- <p class="text-muted" style="font-size:13px">
- Роль задаёт базовый набор прав. Индивидуальные overrides (справа) могут дополнить или ограничить их.
- </p>
- <div class="form-group mb-0">
- @foreach($roleLabels as $roleKey => $roleInfo)
- {{-- superadmin может назначить только суперадмин --}}
- @if($roleKey === 'superadmin' && auth()->user()->role !== 'superadmin')
- @continue
- @endif
- {{-- admin может назначить только суперадмин --}}
- @if($roleKey === 'admin' && auth()->user()->role !== 'superadmin')
- @continue
- @endif
- <div class="custom-control custom-radio mb-2">
- <input type="radio" class="custom-control-input" id="role_{{ $roleKey }}"
- name="role" value="{{ $roleKey }}" {{ $user->role === $roleKey ? 'checked' : '' }}>
- <label class="custom-control-label" for="role_{{ $roleKey }}">
- <span class="badge badge-{{ $roleInfo['color'] }}">{{ $roleInfo['label'] }}</span>
- <div style="font-size:11px;color:var(--muted,#666);margin-top:3px">
- @switch($roleKey)
- @case('superadmin') Все права, управляет всеми @break
- @case('admin') Всё кроме управления admins @break
- @case('editor') Автомобили + контент сайта @break
- @case('viewer') Только просмотр @break
- @endswitch
- </div>
- </label>
- </div>
- @endforeach
- <div class="custom-control custom-radio mt-2">
- <input type="radio" class="custom-control-input" id="role_none"
- name="role" value="" {{ ! $user->role ? 'checked' : '' }}>
- <label class="custom-control-label" for="role_none">
- <span class="badge badge-secondary">Без роли</span>
- <div style="font-size:11px;color:var(--muted,#666);margin-top:3px">Нет доступа в панель</div>
- </label>
- </div>
- </div>
- </div>
- <div class="card-footer">
- <button type="submit" class="btn btn-primary btn-block">
- <i class="fas fa-save"></i> Сохранить
- </button>
- <a href="{{ route('admin.users.index') }}" class="btn btn-secondary btn-block mt-1">Отмена</a>
- </div>
- </div>
- </div>
- <div class="col-md-8">
- <div class="card card-secondary card-outline">
- <div class="card-header">
- <h3 class="card-title">Индивидуальные overrides</h3>
- <div class="card-tools">
- <small class="text-muted">
- <span class="badge badge-success">Allow</span> — разрешить поверх роли
- <span class="badge badge-danger">Deny</span> — запретить поверх роли
- <span class="badge badge-secondary">Роль</span> — без override
- </small>
- </div>
- </div>
- <div class="card-body">
- @foreach($permissions as $groupName => $groupPerms)
- <h6 class="text-uppercase text-muted mb-2" style="font-size:11px;letter-spacing:.1em">{{ $groupName }}</h6>
- <table class="table table-sm table-bordered mb-3">
- <thead>
- <tr>
- <th>Право</th>
- <th style="width:90px" class="text-center">По роли</th>
- <th style="width:260px" class="text-center">Override</th>
- </tr>
- </thead>
- <tbody>
- @foreach($groupPerms as $key => $label)
- @php
- $inRole = in_array($key, $roleDefaults, true);
- $override = $overrides[$key] ?? null;
- @endphp
- <tr>
- <td>
- {{ $label }}
- <div><code style="font-size:10px">{{ $key }}</code></div>
- </td>
- <td class="text-center">
- @if($user->role === 'superadmin')
- <span class="badge badge-success">✓</span>
- @elseif($inRole)
- <span class="badge badge-success">✓</span>
- @else
- <span class="badge badge-secondary">—</span>
- @endif
- </td>
- <td class="text-center">
- <div class="d-flex justify-content-center gap-2" style="gap:6px">
- <label class="mb-0">
- <input type="radio" name="permissions[{{ $key }}]" value="allow"
- {{ $override && $override->action === 'allow' ? 'checked' : '' }}>
- <span class="badge badge-success ml-1">Allow</span>
- </label>
- <label class="mb-0">
- <input type="radio" name="permissions[{{ $key }}]" value="deny"
- {{ $override && $override->action === 'deny' ? 'checked' : '' }}>
- <span class="badge badge-danger ml-1">Deny</span>
- </label>
- <label class="mb-0">
- <input type="radio" name="permissions[{{ $key }}]" value=""
- {{ ! $override ? 'checked' : '' }}>
- <span class="badge badge-secondary ml-1">Роль</span>
- </label>
- </div>
- </td>
- </tr>
- @endforeach
- </tbody>
- </table>
- @endforeach
- </div>
- </div>
- </div>
- </div>
- </form>
- @stop
|