Files
Sio-Back/app/Http/Controllers/Administrador/RolesController.php
SIO Admin de656b70a2 feat: Actualizacion sistema SIO Backend
- Nuevo modulo de historial de cambios (ServicioHistorial)
- Observer para tracking automatico de cambios en servicios
- Correccion de variables auxiliar en ServiciosController
- Actualizacion de configuraciones y migraciones
- Endpoint para consultar historial de cambios

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-17 23:01:55 +00:00

176 lines
4.5 KiB
PHP
Executable File

<?php
namespace App\Http\Controllers\Administrador;
use App\Http\Requests\Administrador\RolesRequest;
use App\Models\Rol;
use Cartalyst\Sentinel\Native\Facades\Sentinel;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\Route;
use Log;
class RolesController extends Controller
{
/**
* Display a listing of the resource.
*
* @return \Illuminate\Http\Response
*/
public function index(Request $request)
{
$orderBy = $request->input('sortBy','name');
$order = $request->input('order','asc');
$queryBuilder = Rol::orderBy($orderBy,$order);
if($query = $request->get('query',false)){
$queryBuilder->where(function($q) use ($query){
$q->where('name','like','%' .$query.'%')
->orWhere('slug','like','%' .$query.'%');
});
}
if($perPage = $request->input('perPage',false)){
$users = $queryBuilder->paginate($perPage);
}else{
$users = ['data'=>$queryBuilder->get()];
}
return response()->success($users);
}
/**
* Store a newly created resource in storage.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
public function store(RolesRequest $request)
{
$data = $request->only([
'slug',
'name',
'movil',
'web'
]);
$existe = Rol::where('slug','=',$data['slug'])
->where('name','=',$data['name'])
->first();
if($existe){
return response()->unprocessable('Error', ['El rol ya se encuentra registrado']);
}
$rol = Rol::create($data);
$role = Sentinel::findRoleById($rol->id);
foreach ($request->input('permissions') as $key => $value){
$role->addPermission($key, ($value == "true")? true : false);
$role->save();
}
return response()->success($rol);
}
/**
* Display the specified resource.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function show($id)
{
$role = Sentinel::findRoleById($id);
$routeCollection = Route::getRoutes();
foreach ($routeCollection as $value) {
$collection[] = ['name'=>$value->getName()];
}
$collection = collect($collection);
$sorted = $collection->sortBy('name');
$sorted->values()->all();
$permisos = [];
foreach ($sorted as $value) {
if($value['name']!=''){
$permisos[$value['name']] = false;
}
}
$role['permissions'] = collect($permisos)
->merge($role['permissions'])
->all();
//Log::info("roles show");
//Log::info($role);
return response()->success($role);
}
/**
* Update the specified resource in storage.
*
* @param \Illuminate\Http\Request $request
* @param int $id
* @return \Illuminate\Http\Response
*/
public function update(RolesRequest $request, $id)
{
$rol = Rol::findOrFail($id);
$data = $request->only(['slug','name','permissions','movil','web']);
$role = Sentinel::findRoleById($id);
foreach ($data['permissions'] as $key => $value){
$role->updatePermission($key, ($value == "true")? true : false);
$role->addPermission($key, ($value == "true")? true : false);
$role->save();
}
$rol->slug = $data['slug'];
$rol->name = $data['name'];
$rol->movil = $data['movil'];
$rol->web = $data['web'];
$rol->save();
return response()->success($rol);
}
/**
* Remove the specified resource from storage.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function destroy($id)
{
$rol = Rol::findOrFail($id);
$rol->delete();
return response()->success(['result'=>true]);
}
public function rutas(){
$routeCollection = Route::getRoutes();
foreach ($routeCollection as $value) {
$collection[] = ['name'=>$value->getName()];
}
$collection = collect($collection);
$sorted = $collection->values()->all();
$permisos = [];
foreach ($sorted as $value) {
if($value['name']!=''){
$permisos[$value['name']] = false;
}
}
return response()->success($permisos);
}
}