Add getInfo endpoint to AdminController and update admin-info component
This commit is contained in:
parent
61ee7a7b05
commit
b66d08b568
|
@ -7,8 +7,22 @@ use Illuminate\Support\Facades\App;
|
|||
use Illuminate\Support\Facades\Artisan;
|
||||
use Illuminate\Support\Str;
|
||||
|
||||
use App\Models\User;
|
||||
use App\Models\Role;
|
||||
use App\Models\Permission;
|
||||
|
||||
class AdminController extends Controller
|
||||
{
|
||||
public function getInfo() {
|
||||
if(!request()->user()->hasPermission("admin-info-read")) abort(401);
|
||||
|
||||
return response()->json([
|
||||
'users' => User::select('id', 'name', 'surname', 'last_access', 'created_at')
|
||||
->orderBy('last_access', 'desc')
|
||||
->get()
|
||||
]);
|
||||
}
|
||||
|
||||
public function getDBData() {
|
||||
if(!request()->user()->hasPermission("admin-maintenance-read")) abort(401);
|
||||
|
||||
|
@ -120,8 +134,8 @@ class AdminController extends Controller
|
|||
public function getPermissionsAndRoles() {
|
||||
if(!request()->user()->hasPermission("admin-roles-read")) abort(401);
|
||||
return response()->json([
|
||||
'permissions' => \App\Models\Permission::orderBy('name')->get(),
|
||||
'roles' => \App\Models\Role::with('permissions:id,name')->get()
|
||||
'permissions' => Permission::orderBy('name')->get(),
|
||||
'roles' => Role::with('permissions:id,name')->get()
|
||||
]);
|
||||
}
|
||||
|
||||
|
@ -136,7 +150,7 @@ class AdminController extends Controller
|
|||
|
||||
$roles = $request->input('changes');
|
||||
foreach($roles as $role) {
|
||||
$roleModel = \App\Models\Role::find($role['roleId']);
|
||||
$roleModel = Role::find($role['roleId']);
|
||||
//If the role already has the permission, remove it, otherwise add it
|
||||
if($roleModel->permissions()->where('id', $role['permissionId'])->exists()) {
|
||||
$roleModel->permissions()->detach([$role['permissionId']]);
|
||||
|
|
|
@ -92,6 +92,8 @@ Route::middleware('auth:sanctum')->group( function () {
|
|||
|
||||
Route::post('/logout', [AuthController::class, 'logout']);
|
||||
|
||||
Route::get('/admin/info', [AdminController::class, 'getInfo']);
|
||||
|
||||
Route::get('/admin/db', [AdminController::class, 'getDBData']);
|
||||
Route::post('/admin/runMigrations', [AdminController::class, 'runMigrations']);
|
||||
Route::post('/admin/runSeeding', [AdminController::class, 'runSeeding']);
|
||||
|
|
|
@ -1 +1,25 @@
|
|||
Info
|
||||
<div class="col-8 mx-auto table-responsive-md">
|
||||
<table class="table table-bordered text-center">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>{{ 'name'|translate|ftitlecase }}</th>
|
||||
<th>{{ 'edit_user.last_access'|translate }}</th>
|
||||
<th>{{ 'edit_user.creation_date'|translate }}</th>
|
||||
<th *ngIf="auth.profile.can('users-update')">{{ 'edit'|translate|ftitlecase }}</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr *ngFor="let user of info.users">
|
||||
<td>
|
||||
<i *ngIf="auth.profile.can('users-impersonate') && user.id !== auth.profile.id" class="fa fa-user me-2" (click)="onUserImpersonate(user.id)"></i>
|
||||
<div (click)="onMoreDetails(user.id)" class="d-inline">
|
||||
{{ user.surname }} {{ user.name }}
|
||||
</div>
|
||||
</td>
|
||||
<td>{{ user.last_access | date:'dd/MM/YYYY, HH:mm' }}</td>
|
||||
<td>{{ user.created_at | date:'dd/MM/YYYY, HH:mm' }}</td>
|
||||
<td *ngIf="auth.profile.can('users-update')" (click)="editUser(user.id)"><i class="fa fa-edit"></i></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
|
|
|
@ -1,6 +1,10 @@
|
|||
import { Component, OnInit } from '@angular/core';
|
||||
import { Router } from '@angular/router';
|
||||
import { TranslateService } from '@ngx-translate/core';
|
||||
import { ApiClientService } from 'src/app/_services/api-client.service';
|
||||
import { AuthService } from 'src/app/_services/auth.service';
|
||||
import { ModalUserInfoComponent } from '../../../_components/modal-user-info/modal-user-info.component';
|
||||
import { BsModalService } from 'ngx-bootstrap/modal';
|
||||
import Swal from 'sweetalert2';
|
||||
|
||||
@Component({
|
||||
|
@ -9,11 +13,54 @@ import Swal from 'sweetalert2';
|
|||
styleUrls: ['./admin-info.component.scss']
|
||||
})
|
||||
export class AdminInfoComponent implements OnInit {
|
||||
info: any;
|
||||
|
||||
constructor(
|
||||
private translateService: TranslateService,
|
||||
private api: ApiClientService
|
||||
private api: ApiClientService,
|
||||
public auth: AuthService,
|
||||
private router: Router,
|
||||
private modalService: BsModalService
|
||||
) { }
|
||||
|
||||
getInfo() {
|
||||
this.api.get('admin/info').then((res: any) => {
|
||||
this.info = res;
|
||||
}).catch((err: any) => {
|
||||
console.error(err);
|
||||
Swal.fire({
|
||||
title: this.translateService.instant("error_title"),
|
||||
text: err.error.message,
|
||||
icon: 'error',
|
||||
confirmButtonText: 'Ok'
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
ngOnInit(): void {
|
||||
this.getInfo();
|
||||
}
|
||||
|
||||
onUserImpersonate(user: number) {
|
||||
if(this.auth.profile.can('users-impersonate')) {
|
||||
this.router.navigate(['/list']);
|
||||
this.auth.impersonate(user).then(() => {
|
||||
console.log(user);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
onMoreDetails(id: number) {
|
||||
if(this.auth.profile.can('users-update')) {
|
||||
this.modalService.show(ModalUserInfoComponent, {
|
||||
initialState: {
|
||||
id
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
editUser(id: number) {
|
||||
this.router.navigate(['/users', id]);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,11 +1,6 @@
|
|||
import { NgModule } from '@angular/core';
|
||||
import { CommonModule } from '@angular/common';
|
||||
|
||||
import { FormsModule, ReactiveFormsModule } from '@angular/forms';
|
||||
import { BsDatepickerModule } from 'ngx-bootstrap/datepicker';
|
||||
import { MapPickerModule } from '../../../_components/map-picker/map-picker.module';
|
||||
import { DatetimePickerModule } from '../../../_components/datetime-picker/datetime-picker.module';
|
||||
import { BackBtnModule } from '../../../_components/back-btn/back-btn.module';
|
||||
import { TranslationModule } from '../../../translation.module';
|
||||
import { FirstLetterUppercasePipe } from '../../../_pipes/first-letter-uppercase.pipe';
|
||||
|
||||
|
@ -19,12 +14,6 @@ import { AdminInfoRoutingModule } from './admin-info-routing.module';
|
|||
imports: [
|
||||
CommonModule,
|
||||
AdminInfoRoutingModule,
|
||||
FormsModule,
|
||||
ReactiveFormsModule,
|
||||
BsDatepickerModule.forRoot(),
|
||||
MapPickerModule,
|
||||
DatetimePickerModule,
|
||||
BackBtnModule,
|
||||
TranslationModule,
|
||||
FirstLetterUppercasePipe
|
||||
]
|
||||
|
|
Loading…
Reference in New Issue