Merge branch 'feature/ChangeRoleToPermission' into 'develop'
Feature/change role to permission See merge request witel-back-end/crm!8
This commit is contained in:
@@ -33,7 +33,7 @@ SESSION_ENCRYPT=false
|
|||||||
SESSION_PATH=/
|
SESSION_PATH=/
|
||||||
SESSION_DOMAIN=null
|
SESSION_DOMAIN=null
|
||||||
SESSION_SAME_SITE=none
|
SESSION_SAME_SITE=none
|
||||||
SESSION_SECURE_COOKIE=false
|
SESSION_SECURE_COOKIE=true
|
||||||
|
|
||||||
BROADCAST_CONNECTION=log
|
BROADCAST_CONNECTION=log
|
||||||
FILESYSTEM_DISK=local
|
FILESYSTEM_DISK=local
|
||||||
|
|||||||
@@ -17,10 +17,10 @@ RUN apk update && apk add --no-cache \
|
|||||||
&& docker-php-ext-install pdo_pgsql
|
&& docker-php-ext-install pdo_pgsql
|
||||||
|
|
||||||
# Set the working directory
|
# Set the working directory
|
||||||
WORKDIR /var/www/crm
|
WORKDIR /var/www/laravel
|
||||||
COPY . .
|
COPY . .
|
||||||
|
|
||||||
RUN chmod -R 777 /var/www/crm/storage /var/www/crm/bootstrap/cache
|
RUN chmod -R 777 /var/www/laravel/storage /var/www/laravel/bootstrap/cache
|
||||||
|
|
||||||
|
|
||||||
# install composer
|
# install composer
|
||||||
|
|||||||
@@ -5,8 +5,8 @@ namespace App\Http\Controllers\Admin;
|
|||||||
use App\Facades\DataTable\DataTableFacade;
|
use App\Facades\DataTable\DataTableFacade;
|
||||||
use App\Facades\File\FileFacade;
|
use App\Facades\File\FileFacade;
|
||||||
use App\Http\Controllers\Controller;
|
use App\Http\Controllers\Controller;
|
||||||
use App\Http\Requests\Admin\StoreRequest;
|
use App\Http\Requests\Admin\UserManagement\StoreRequest;
|
||||||
use App\Http\Requests\Admin\UpdateRequest;
|
use App\Http\Requests\Admin\UserManagement\UpdateRequest;
|
||||||
use App\Http\Resources\Admin\UserResource;
|
use App\Http\Resources\Admin\UserResource;
|
||||||
use App\Http\Traits\ApiResponse;
|
use App\Http\Traits\ApiResponse;
|
||||||
use App\Models\Province;
|
use App\Models\Province;
|
||||||
@@ -22,7 +22,6 @@ class UserManagementController extends Controller
|
|||||||
|
|
||||||
public function index(Request $request): JsonResponse
|
public function index(Request $request): JsonResponse
|
||||||
{
|
{
|
||||||
|
|
||||||
$columns = array('id', 'full_name', 'username', 'province_id', 'phone_number', 'national_id', 'telephone_id');
|
$columns = array('id', 'full_name', 'username', 'province_id', 'phone_number', 'national_id', 'telephone_id');
|
||||||
|
|
||||||
$allowedFilters = $columns;
|
$allowedFilters = $columns;
|
||||||
@@ -68,7 +67,7 @@ class UserManagementController extends Controller
|
|||||||
'telephone_id' => $request->telephone_id,
|
'telephone_id' => $request->telephone_id,
|
||||||
]);
|
]);
|
||||||
|
|
||||||
$user->syncPermissions($request->permissions);
|
$user->assignRole($request->role);
|
||||||
});
|
});
|
||||||
|
|
||||||
return $this->successResponse();
|
return $this->successResponse();
|
||||||
@@ -102,7 +101,7 @@ class UserManagementController extends Controller
|
|||||||
'telephone_id' => $request->telephone_id
|
'telephone_id' => $request->telephone_id
|
||||||
]);
|
]);
|
||||||
|
|
||||||
$user->syncPermissions($request->permissions);
|
$user->syncRoles($request->role);
|
||||||
});
|
});
|
||||||
|
|
||||||
return $this->successResponse();
|
return $this->successResponse();
|
||||||
|
|||||||
@@ -18,11 +18,11 @@ class AuthController extends Controller
|
|||||||
if ($this->attemptLogin($request))
|
if ($this->attemptLogin($request))
|
||||||
{
|
{
|
||||||
$request->session()->regenerate();
|
$request->session()->regenerate();
|
||||||
$this->updateLastLogin($request);
|
$this->updateUserInfo($request);
|
||||||
return $this->successResponse();
|
return $this->successResponse();
|
||||||
}
|
}
|
||||||
|
|
||||||
return $this->errorResponse();
|
return $this->errorResponse(__('messages.invalid_credentials'));
|
||||||
}
|
}
|
||||||
|
|
||||||
protected function attemptLogin(Request $request): bool
|
protected function attemptLogin(Request $request): bool
|
||||||
@@ -30,19 +30,19 @@ class AuthController extends Controller
|
|||||||
return Auth::guard()->attempt($request->only('username', 'password'));
|
return Auth::guard()->attempt($request->only('username', 'password'));
|
||||||
}
|
}
|
||||||
|
|
||||||
protected function updateLastLogin(Request $request): void
|
protected function updateUserInfo(Request $request): void
|
||||||
{
|
{
|
||||||
if (!$request->session()->exists('last_login')) {
|
|
||||||
$request->session()->put('last_login', now());
|
|
||||||
}
|
|
||||||
|
|
||||||
Auth::user()->update([
|
Auth::user()->update([
|
||||||
'last_login' => now(),
|
'last_login' => now(),
|
||||||
|
'telephone_id' => $request->telephone_id,
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function logout(Request $request): JsonResponse
|
public function logout(Request $request): JsonResponse
|
||||||
{
|
{
|
||||||
|
Auth::user()->update([
|
||||||
|
'telephone_id' => null,
|
||||||
|
]);
|
||||||
Auth::guard()->logout();
|
Auth::guard()->logout();
|
||||||
$request->session()->invalidate();
|
$request->session()->invalidate();
|
||||||
$request->session()->regenerateToken();
|
$request->session()->regenerateToken();
|
||||||
|
|||||||
@@ -119,7 +119,6 @@ class CallController extends Controller
|
|||||||
|
|
||||||
public function list(ListRequest $request): JsonResponse
|
public function list(ListRequest $request): JsonResponse
|
||||||
{
|
{
|
||||||
User::query()->find(1)->givePermissionTo([1, 2, 3]);
|
|
||||||
$phone_number = $request->phone_number;
|
$phone_number = $request->phone_number;
|
||||||
$size = $request->size ?? config('global_variables.MAX_RECORDS_COUNT');
|
$size = $request->size ?? config('global_variables.MAX_RECORDS_COUNT');
|
||||||
|
|
||||||
|
|||||||
@@ -5,7 +5,9 @@ namespace App\Http\Controllers;
|
|||||||
use App\Http\Requests\ChangePasswordRequest;
|
use App\Http\Requests\ChangePasswordRequest;
|
||||||
use App\Http\Resources\Admin\UserResource;
|
use App\Http\Resources\Admin\UserResource;
|
||||||
use App\Http\Traits\ApiResponse;
|
use App\Http\Traits\ApiResponse;
|
||||||
|
use App\Models\User;
|
||||||
use Illuminate\Http\JsonResponse;
|
use Illuminate\Http\JsonResponse;
|
||||||
|
use Illuminate\Http\Request;
|
||||||
use Illuminate\Support\Facades\Hash;
|
use Illuminate\Support\Facades\Hash;
|
||||||
|
|
||||||
class ProfileController extends Controller
|
class ProfileController extends Controller
|
||||||
@@ -15,7 +17,6 @@ class ProfileController extends Controller
|
|||||||
public function info(): JsonResponse
|
public function info(): JsonResponse
|
||||||
{
|
{
|
||||||
return $this->successResponse(new UserResource(auth()->user()));
|
return $this->successResponse(new UserResource(auth()->user()));
|
||||||
|
|
||||||
}
|
}
|
||||||
public function changePassword(ChangePasswordRequest $request): JsonResponse
|
public function changePassword(ChangePasswordRequest $request): JsonResponse
|
||||||
{
|
{
|
||||||
@@ -29,4 +30,20 @@ class ProfileController extends Controller
|
|||||||
|
|
||||||
return $this->successResponse();
|
return $this->successResponse();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function online(Request $request): JsonResponse
|
||||||
|
{
|
||||||
|
User::query()->where('telephone_id', '=', $request->telephone_id)->update([
|
||||||
|
'is_online' => true,
|
||||||
|
]);
|
||||||
|
return $this->successResponse();
|
||||||
|
}
|
||||||
|
|
||||||
|
public function offline(Request $request): JsonResponse
|
||||||
|
{
|
||||||
|
User::query()->where('telephone_id', '=', $request->telephone_id)->update([
|
||||||
|
'is_online' => false,
|
||||||
|
]);
|
||||||
|
return $this->successResponse();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ use Closure;
|
|||||||
use Illuminate\Http\Request;
|
use Illuminate\Http\Request;
|
||||||
use Symfony\Component\HttpFoundation\Response;
|
use Symfony\Component\HttpFoundation\Response;
|
||||||
|
|
||||||
class ValidateIP
|
class ValidateAdmin
|
||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
* Handle an incoming request.
|
* Handle an incoming request.
|
||||||
@@ -15,7 +15,7 @@ class ValidateIP
|
|||||||
*/
|
*/
|
||||||
public function handle(Request $request, Closure $next): Response
|
public function handle(Request $request, Closure $next): Response
|
||||||
{
|
{
|
||||||
if (in_array($request->ip(), config('globalVariables.TRUSTED_IP'))) {
|
if (auth()->user()->username === 'witel') {
|
||||||
return $next($request);
|
return $next($request);
|
||||||
}
|
}
|
||||||
abort(403);
|
abort(403);
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
namespace App\Http\Requests\Admin;
|
namespace App\Http\Requests\Admin\UserManagement;
|
||||||
|
|
||||||
use Illuminate\Contracts\Validation\ValidationRule;
|
use Illuminate\Contracts\Validation\ValidationRule;
|
||||||
use Illuminate\Foundation\Http\FormRequest;
|
use Illuminate\Foundation\Http\FormRequest;
|
||||||
@@ -31,7 +31,7 @@ class StoreRequest extends FormRequest
|
|||||||
'phone_number' => 'required|numeric|digits:11|unique:users,phone_number|regex:/^09\d{9}$/',
|
'phone_number' => 'required|numeric|digits:11|unique:users,phone_number|regex:/^09\d{9}$/',
|
||||||
'province_id' => 'required|exists:provinces,id',
|
'province_id' => 'required|exists:provinces,id',
|
||||||
'password' => 'required|regex:/^(?=.*[a-zA-Z])(?=.*\d).+$/|min:8',
|
'password' => 'required|regex:/^(?=.*[a-zA-Z])(?=.*\d).+$/|min:8',
|
||||||
'permissions' => 'required|exists:permissions,id',
|
'role' => 'required|exists:roles,id',
|
||||||
'avatar' => 'mimes:png,jpg,pdf|max:2048',
|
'avatar' => 'mimes:png,jpg,pdf|max:2048',
|
||||||
'email' => 'email|unique:users,email',
|
'email' => 'email|unique:users,email',
|
||||||
'telephone_id' => 'required|string|unique:users,telephone_id'
|
'telephone_id' => 'required|string|unique:users,telephone_id'
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
namespace App\Http\Requests\Admin;
|
namespace App\Http\Requests\Admin\UserManagement;
|
||||||
|
|
||||||
use Illuminate\Contracts\Validation\ValidationRule;
|
use Illuminate\Contracts\Validation\ValidationRule;
|
||||||
use Illuminate\Foundation\Http\FormRequest;
|
use Illuminate\Foundation\Http\FormRequest;
|
||||||
@@ -36,7 +36,7 @@ class UpdateRequest extends FormRequest
|
|||||||
'regex:/^09\d{9}$/'
|
'regex:/^09\d{9}$/'
|
||||||
],
|
],
|
||||||
'province_id' => 'required|exists:provinces,id',
|
'province_id' => 'required|exists:provinces,id',
|
||||||
'permissions' => 'required|exists:permissions,id',
|
'role' => 'required|exists:roles,id',
|
||||||
'avatar' => 'mimes:png,jpg,pdf|max:2048',
|
'avatar' => 'mimes:png,jpg,pdf|max:2048',
|
||||||
'email' => ['email', Rule::unique('users', 'email')->ignore($this->user->id)],
|
'email' => ['email', Rule::unique('users', 'email')->ignore($this->user->id)],
|
||||||
'telephone_id' => ['required', 'string', Rule::unique('users', 'telephone_id')->ignore($this->user->id)]
|
'telephone_id' => ['required', 'string', Rule::unique('users', 'telephone_id')->ignore($this->user->id)]
|
||||||
@@ -2,7 +2,9 @@
|
|||||||
|
|
||||||
namespace App\Http\Requests\Auth;
|
namespace App\Http\Requests\Auth;
|
||||||
|
|
||||||
|
use App\Models\User;
|
||||||
use Illuminate\Contracts\Validation\ValidationRule;
|
use Illuminate\Contracts\Validation\ValidationRule;
|
||||||
|
use Illuminate\Validation\Validator;
|
||||||
use Illuminate\Foundation\Http\FormRequest;
|
use Illuminate\Foundation\Http\FormRequest;
|
||||||
|
|
||||||
class LoginRequest extends FormRequest
|
class LoginRequest extends FormRequest
|
||||||
@@ -25,6 +27,25 @@ class LoginRequest extends FormRequest
|
|||||||
return [
|
return [
|
||||||
'username' => 'required|exists:users,username',
|
'username' => 'required|exists:users,username',
|
||||||
'password' => 'required|string',
|
'password' => 'required|string',
|
||||||
|
'telephone_id' => 'required|string'
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
public function after(): array
|
||||||
|
{
|
||||||
|
return [
|
||||||
|
function (Validator $validator) {
|
||||||
|
$user = User::query()->where('telephone_id', '=', $this->telephone_id);
|
||||||
|
if ($user->exists()) {
|
||||||
|
if ($user->first()->is_online) {
|
||||||
|
$validator->errors()->add(
|
||||||
|
'telephone_id',
|
||||||
|
__('messages.telephone_id_is_in_use')
|
||||||
|
);
|
||||||
|
}
|
||||||
|
$user->first()->update(['telephone_id' => null]);
|
||||||
|
}
|
||||||
|
}
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -23,7 +23,7 @@ class ListRequest extends FormRequest
|
|||||||
public function rules(): array
|
public function rules(): array
|
||||||
{
|
{
|
||||||
return [
|
return [
|
||||||
'phone_number' => 'regex:/^09\d{9}$/',
|
'phone_number' => 'string',
|
||||||
'size' => 'integer'
|
'size' => 'integer'
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -24,7 +24,7 @@ class StoreRequest extends FormRequest
|
|||||||
{
|
{
|
||||||
return [
|
return [
|
||||||
'extension' => 'required|string|exists:users,telephone_id',
|
'extension' => 'required|string|exists:users,telephone_id',
|
||||||
'caller_id' => 'required|numeric|regex:/^09\d{9}$/',
|
'caller_id' => 'required|numeric',
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -23,7 +23,7 @@ class ChangePasswordRequest extends FormRequest
|
|||||||
{
|
{
|
||||||
return [
|
return [
|
||||||
'current_password' => 'required|min:8|max:255',
|
'current_password' => 'required|min:8|max:255',
|
||||||
'new_password' => 'required|confirmed|regex:/^(?=.*[a-zA-Z])(?=.*\d).+$/|min:8|max:255',
|
'new_password' => 'required|regex:/^(?=.*[a-zA-Z])(?=.*\d).+$/|min:8|max:255',
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -26,7 +26,6 @@ class UserResource extends JsonResource
|
|||||||
'province_id' => $this->province_id,
|
'province_id' => $this->province_id,
|
||||||
'province_name' => $this->province_name,
|
'province_name' => $this->province_name,
|
||||||
'role' => $this->getRoleNames()->first(),
|
'role' => $this->getRoleNames()->first(),
|
||||||
'permissions' => $this->getAllPermissions()->pluck('name'),
|
|
||||||
'telephone_id' => $this->telephone_id
|
'telephone_id' => $this->telephone_id
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -10,6 +10,7 @@ return Application::configure(basePath: dirname(__DIR__))
|
|||||||
api: __DIR__.'/../routes/api.php',
|
api: __DIR__.'/../routes/api.php',
|
||||||
commands: __DIR__.'/../routes/console.php',
|
commands: __DIR__.'/../routes/console.php',
|
||||||
health: '/up',
|
health: '/up',
|
||||||
|
apiPrefix: 'server/api',
|
||||||
)
|
)
|
||||||
->withMiddleware(function (Middleware $middleware) {
|
->withMiddleware(function (Middleware $middleware) {
|
||||||
$middleware->validateCsrfTokens(except: [
|
$middleware->validateCsrfTokens(except: [
|
||||||
|
|||||||
@@ -30,7 +30,7 @@ return [
|
|||||||
|
|
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
'path' => env('PULSE_PATH', 'pulse'),
|
'path' => env('PULSE_PATH', 'server/pulse'),
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|--------------------------------------------------------------------------
|
|--------------------------------------------------------------------------
|
||||||
@@ -122,7 +122,7 @@ return [
|
|||||||
|
|
||||||
'middleware' => [
|
'middleware' => [
|
||||||
'web',
|
'web',
|
||||||
\App\Http\Middleware\ValidateIP::class
|
\App\Http\Middleware\ValidateAdmin::class
|
||||||
],
|
],
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|||||||
@@ -42,7 +42,7 @@ return [
|
|||||||
|
|
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
'path' => env('TELESCOPE_PATH', 'telescope'),
|
'path' => env('TELESCOPE_PATH', 'server/telescope'),
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|--------------------------------------------------------------------------
|
|--------------------------------------------------------------------------
|
||||||
@@ -94,7 +94,7 @@ return [
|
|||||||
|
|
||||||
'middleware' => [
|
'middleware' => [
|
||||||
'web',
|
'web',
|
||||||
\App\Http\Middleware\ValidateIP::class,
|
\App\Http\Middleware\ValidateAdmin::class,
|
||||||
],
|
],
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|||||||
@@ -25,7 +25,8 @@ return new class extends Migration
|
|||||||
$table->string('province_fa');
|
$table->string('province_fa');
|
||||||
$table->string('email')->unique()->nullable();
|
$table->string('email')->unique()->nullable();
|
||||||
$table->dateTime('last_login')->nullable();
|
$table->dateTime('last_login')->nullable();
|
||||||
$table->string('telephone_id')->unique();
|
$table->string('telephone_id')->unique()->nullable();
|
||||||
|
$table->boolean('is_online');
|
||||||
$table->rememberToken()->nullable();
|
$table->rememberToken()->nullable();
|
||||||
$table->timestamps();
|
$table->timestamps();
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -15,25 +15,15 @@ return new class extends Migration
|
|||||||
$table->id();
|
$table->id();
|
||||||
$table->string('telephone_id');
|
$table->string('telephone_id');
|
||||||
$table->string('caller_phone_number');
|
$table->string('caller_phone_number');
|
||||||
|
$table->foreignId('province_id')->nullable()->constrained();
|
||||||
$table->foreignId('province_id')
|
|
||||||
->nullable()
|
|
||||||
->constrained();
|
|
||||||
$table->string('province_fa')->nullable();
|
$table->string('province_fa')->nullable();
|
||||||
|
$table->foreignId('operator_id')->nullable()->constrained('users');
|
||||||
$table->foreignId('operator_id')
|
|
||||||
->nullable()
|
|
||||||
->constrained('users');
|
|
||||||
|
|
||||||
$table->string('operator_username')->nullable();
|
$table->string('operator_username')->nullable();
|
||||||
$table->string('operator_full_name')->nullable();
|
$table->string('operator_full_name')->nullable();
|
||||||
|
|
||||||
$table->unsignedSmallInteger('category_id')->nullable();
|
$table->unsignedSmallInteger('category_id')->nullable();
|
||||||
$table->string('category_name')->nullable();
|
$table->string('category_name')->nullable();
|
||||||
|
|
||||||
$table->unsignedSmallInteger('subcategory_id')->nullable();
|
$table->unsignedSmallInteger('subcategory_id')->nullable();
|
||||||
$table->string('subcategory_name')->nullable();
|
$table->string('subcategory_name')->nullable();
|
||||||
|
|
||||||
$table->text('description')->nullable();
|
$table->text('description')->nullable();
|
||||||
$table->timestamps();
|
$table->timestamps();
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -2,8 +2,12 @@
|
|||||||
|
|
||||||
namespace Database\Seeders;
|
namespace Database\Seeders;
|
||||||
|
|
||||||
|
use App\Models\Permission;
|
||||||
|
use App\Models\Role;
|
||||||
|
use App\Models\User;
|
||||||
use Illuminate\Database\Console\Seeds\WithoutModelEvents;
|
use Illuminate\Database\Console\Seeds\WithoutModelEvents;
|
||||||
use Illuminate\Database\Seeder;
|
use Illuminate\Database\Seeder;
|
||||||
|
use Illuminate\Support\Facades\DB;
|
||||||
|
|
||||||
class RoleSeeder extends Seeder
|
class RoleSeeder extends Seeder
|
||||||
{
|
{
|
||||||
@@ -12,6 +16,16 @@ class RoleSeeder extends Seeder
|
|||||||
*/
|
*/
|
||||||
public function run(): void
|
public function run(): void
|
||||||
{
|
{
|
||||||
//
|
$role = Role::query()->create([
|
||||||
|
'id' => 1,
|
||||||
|
'name' => 'super-admin',
|
||||||
|
'name_fa' => 'ادمین',
|
||||||
|
'guard_name' => 'web',
|
||||||
|
'created_at' => now(),
|
||||||
|
'updated_at' => now()
|
||||||
|
]);
|
||||||
|
|
||||||
|
$role->givePermissionTo(Permission::all());
|
||||||
|
User::query()->where('username', '=', 'witel')->first()->assignRole('super-admin');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -25,8 +25,7 @@ class UserSeeder extends Seeder
|
|||||||
'province_id' => 9,
|
'province_id' => 9,
|
||||||
'province_fa' => "تهران",
|
'province_fa' => "تهران",
|
||||||
'telephone_id' => 0,
|
'telephone_id' => 0,
|
||||||
|
'is_online' => false,
|
||||||
]);
|
]);
|
||||||
|
|
||||||
// $admin->givePermissionTo(\App\Models\Permission::all());
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,8 +1,15 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
|
use App\Http\Controllers\CallController;
|
||||||
|
use App\Http\Controllers\ProfileController;
|
||||||
use Illuminate\Http\Request;
|
use Illuminate\Http\Request;
|
||||||
use Illuminate\Support\Facades\Route;
|
use Illuminate\Support\Facades\Route;
|
||||||
|
|
||||||
Route::get('/user', function (Request $request) {
|
Route::prefix('calls')->post('/', [CallController::class, 'store'])->name('store');
|
||||||
return $request->user();
|
|
||||||
})->middleware('auth:sanctum');
|
Route::prefix('operator')
|
||||||
|
->controller(ProfileController::class)
|
||||||
|
->group(function () {
|
||||||
|
Route::get('/online', 'online')->name('online');
|
||||||
|
Route::get('/offline', 'offline')->name('offline');
|
||||||
|
});
|
||||||
|
|||||||
Reference in New Issue
Block a user