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\Facades\Artisan;
|
||||||
use Illuminate\Support\Str;
|
use Illuminate\Support\Str;
|
||||||
|
|
||||||
|
use App\Models\User;
|
||||||
|
use App\Models\Role;
|
||||||
|
use App\Models\Permission;
|
||||||
|
|
||||||
class AdminController extends Controller
|
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() {
|
public function getDBData() {
|
||||||
if(!request()->user()->hasPermission("admin-maintenance-read")) abort(401);
|
if(!request()->user()->hasPermission("admin-maintenance-read")) abort(401);
|
||||||
|
|
||||||
|
@ -120,8 +134,8 @@ class AdminController extends Controller
|
||||||
public function getPermissionsAndRoles() {
|
public function getPermissionsAndRoles() {
|
||||||
if(!request()->user()->hasPermission("admin-roles-read")) abort(401);
|
if(!request()->user()->hasPermission("admin-roles-read")) abort(401);
|
||||||
return response()->json([
|
return response()->json([
|
||||||
'permissions' => \App\Models\Permission::orderBy('name')->get(),
|
'permissions' => Permission::orderBy('name')->get(),
|
||||||
'roles' => \App\Models\Role::with('permissions:id,name')->get()
|
'roles' => Role::with('permissions:id,name')->get()
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -136,7 +150,7 @@ class AdminController extends Controller
|
||||||
|
|
||||||
$roles = $request->input('changes');
|
$roles = $request->input('changes');
|
||||||
foreach($roles as $role) {
|
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 the role already has the permission, remove it, otherwise add it
|
||||||
if($roleModel->permissions()->where('id', $role['permissionId'])->exists()) {
|
if($roleModel->permissions()->where('id', $role['permissionId'])->exists()) {
|
||||||
$roleModel->permissions()->detach([$role['permissionId']]);
|
$roleModel->permissions()->detach([$role['permissionId']]);
|
||||||
|
|
|
@ -92,6 +92,8 @@ Route::middleware('auth:sanctum')->group( function () {
|
||||||
|
|
||||||
Route::post('/logout', [AuthController::class, 'logout']);
|
Route::post('/logout', [AuthController::class, 'logout']);
|
||||||
|
|
||||||
|
Route::get('/admin/info', [AdminController::class, 'getInfo']);
|
||||||
|
|
||||||
Route::get('/admin/db', [AdminController::class, 'getDBData']);
|
Route::get('/admin/db', [AdminController::class, 'getDBData']);
|
||||||
Route::post('/admin/runMigrations', [AdminController::class, 'runMigrations']);
|
Route::post('/admin/runMigrations', [AdminController::class, 'runMigrations']);
|
||||||
Route::post('/admin/runSeeding', [AdminController::class, 'runSeeding']);
|
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 { Component, OnInit } from '@angular/core';
|
||||||
|
import { Router } from '@angular/router';
|
||||||
import { TranslateService } from '@ngx-translate/core';
|
import { TranslateService } from '@ngx-translate/core';
|
||||||
import { ApiClientService } from 'src/app/_services/api-client.service';
|
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';
|
import Swal from 'sweetalert2';
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
|
@ -9,11 +13,54 @@ import Swal from 'sweetalert2';
|
||||||
styleUrls: ['./admin-info.component.scss']
|
styleUrls: ['./admin-info.component.scss']
|
||||||
})
|
})
|
||||||
export class AdminInfoComponent implements OnInit {
|
export class AdminInfoComponent implements OnInit {
|
||||||
|
info: any;
|
||||||
|
|
||||||
constructor(
|
constructor(
|
||||||
private translateService: TranslateService,
|
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 {
|
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 { NgModule } from '@angular/core';
|
||||||
import { CommonModule } from '@angular/common';
|
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 { TranslationModule } from '../../../translation.module';
|
||||||
import { FirstLetterUppercasePipe } from '../../../_pipes/first-letter-uppercase.pipe';
|
import { FirstLetterUppercasePipe } from '../../../_pipes/first-letter-uppercase.pipe';
|
||||||
|
|
||||||
|
@ -19,12 +14,6 @@ import { AdminInfoRoutingModule } from './admin-info-routing.module';
|
||||||
imports: [
|
imports: [
|
||||||
CommonModule,
|
CommonModule,
|
||||||
AdminInfoRoutingModule,
|
AdminInfoRoutingModule,
|
||||||
FormsModule,
|
|
||||||
ReactiveFormsModule,
|
|
||||||
BsDatepickerModule.forRoot(),
|
|
||||||
MapPickerModule,
|
|
||||||
DatetimePickerModule,
|
|
||||||
BackBtnModule,
|
|
||||||
TranslationModule,
|
TranslationModule,
|
||||||
FirstLetterUppercasePipe
|
FirstLetterUppercasePipe
|
||||||
]
|
]
|
||||||
|
|
Loading…
Reference in New Issue