| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191 |
- {{-- Вьюха: Создание нового пользователя с назначением роли и прав.
- Контроллер: Admin\UserAdminController@create / store
- Переменные: $permissions (все права по группам), $roleLabels (метки ролей)
- --}}
- @extends('admin.layout')
- @section('title', 'Новый пользователь')
- @section('content_header')
- <div class="d-flex justify-content-between align-items-center">
- <h1 class="m-0">Новый пользователь</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">Новый пользователь</li>
- @stop
- @section('content')
- @if($errors->any())
- <div class="alert alert-danger alert-dismissible">
- <button type="button" class="close" data-dismiss="alert">×</button>
- <ul class="mb-0 pl-3">
- @foreach($errors->all() as $error)
- <li>{{ $error }}</li>
- @endforeach
- </ul>
- </div>
- @endif
- <form action="{{ route('admin.users.store') }}" method="POST">
- @csrf
- <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">
- <div class="form-group">
- <label for="name">Имя <span class="text-danger">*</span></label>
- <input type="text" id="name" name="name" class="form-control @error('name') is-invalid @enderror"
- value="{{ old('name') }}" placeholder="Иван Иванов" required>
- @error('name')
- <div class="invalid-feedback">{{ $message }}</div>
- @enderror
- </div>
- <div class="form-group">
- <label for="email">Email <span class="text-danger">*</span></label>
- <input type="email" id="email" name="email" class="form-control @error('email') is-invalid @enderror"
- value="{{ old('email') }}" placeholder="user@example.com" required>
- @error('email')
- <div class="invalid-feedback">{{ $message }}</div>
- @enderror
- </div>
- <div class="form-group">
- <label for="password">Пароль <span class="text-danger">*</span></label>
- <input type="password" id="password" name="password"
- class="form-control @error('password') is-invalid @enderror"
- placeholder="Минимум 8 символов" required>
- @error('password')
- <div class="invalid-feedback">{{ $message }}</div>
- @enderror
- </div>
- <div class="form-group mb-0">
- <label for="password_confirmation">Подтверждение пароля <span class="text-danger">*</span></label>
- <input type="password" id="password_confirmation" name="password_confirmation"
- class="form-control" placeholder="Повторите пароль" required>
- </div>
- </div>
- </div>
- {{-- Роль --}}
- <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 }}" {{ old('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="" {{ ! old('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-success btn-block">
- <i class="fas fa-user-plus"></i> Создать пользователя
- </button>
- <a href="{{ route('admin.users.index') }}" class="btn btn-secondary btn-block mt-1">Отмена</a>
- </div>
- </div>
- </div>
- {{-- Правая колонка: индивидуальные overrides --}}
- <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:260px" class="text-center">Override</th>
- </tr>
- </thead>
- <tbody>
- @foreach($groupPerms as $key => $label)
- <tr>
- <td>
- {{ $label }}
- <div><code style="font-size:10px">{{ $key }}</code></div>
- </td>
- <td class="text-center">
- <div class="d-flex justify-content-center" style="gap:6px">
- <label class="mb-0">
- <input type="radio" name="permissions[{{ $key }}]" value="allow"
- {{ old('permissions.'.$key) === 'allow' ? 'checked' : '' }}>
- <span class="badge badge-success ml-1">Allow</span>
- </label>
- <label class="mb-0">
- <input type="radio" name="permissions[{{ $key }}]" value="deny"
- {{ old('permissions.'.$key) === 'deny' ? 'checked' : '' }}>
- <span class="badge badge-danger ml-1">Deny</span>
- </label>
- <label class="mb-0">
- <input type="radio" name="permissions[{{ $key }}]" value=""
- {{ ! old('permissions.'.$key) ? 'checked' : '' }}>
- <span class="badge badge-secondary ml-1">Роль</span>
- </label>
- </div>
- </td>
- </tr>
- @endforeach
- </tbody>
- </table>
- @endforeach
- </div>
- </div>
- </div>
- </div>
- </form>
- @stop
|