añadir funicionalidades de permisos y grupos
This commit is contained in:
@@ -2,7 +2,11 @@
|
||||
|
||||
namespace App\Http\Controllers;
|
||||
|
||||
use Illuminate\Foundation\Auth\Access\AuthorizesRequests;
|
||||
use Illuminate\Foundation\Validation\ValidatesRequests;
|
||||
use Illuminate\Routing\Controller as BaseController;
|
||||
|
||||
abstract class Controller
|
||||
{
|
||||
//
|
||||
use AuthorizesRequests, ValidatesRequests; // <-- Traits esenciales
|
||||
}
|
||||
|
||||
@@ -4,6 +4,10 @@ namespace App\Http\Controllers;
|
||||
|
||||
use App\Models\Folder;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Http\Response;
|
||||
use Illuminate\Support\Facades\Validator;
|
||||
use App\Rules\UniqueFolderName;
|
||||
use Illuminate\Support\Facades\Gate;
|
||||
|
||||
class FolderController extends Controller
|
||||
{
|
||||
@@ -50,9 +54,51 @@ class FolderController extends Controller
|
||||
/**
|
||||
* Update the specified resource in storage.
|
||||
*/
|
||||
public function update(Request $request, Folder $folder)
|
||||
public function update(Folder $folder, Request $request)
|
||||
{
|
||||
//
|
||||
try {
|
||||
// Verificar permisos
|
||||
if (!Gate::allows('update', $folder)) {
|
||||
return response()->json([
|
||||
'success' => false,
|
||||
'message' => 'No tienes permisos para modificar esta carpeta'
|
||||
], Response::HTTP_FORBIDDEN);
|
||||
}
|
||||
|
||||
// Validación
|
||||
$validator = Validator::make($request->all(), [
|
||||
'name' => [
|
||||
'required',
|
||||
'max:255',
|
||||
new UniqueFolderName(
|
||||
$folder->project_id,
|
||||
$folder->parent_id
|
||||
)
|
||||
]
|
||||
]);
|
||||
|
||||
if ($validator->fails()) {
|
||||
return response()->json([
|
||||
'success' => false,
|
||||
'errors' => $validator->errors()
|
||||
], Response::HTTP_UNPROCESSABLE_ENTITY);
|
||||
}
|
||||
|
||||
// Actualizar nombre
|
||||
$folder->update(['name' => $request->name]);
|
||||
|
||||
return response()->json([
|
||||
'success' => true,
|
||||
'message' => 'Carpeta actualizada',
|
||||
'folder' => $folder
|
||||
]);
|
||||
|
||||
} catch (\Exception $e) {
|
||||
return response()->json([
|
||||
'success' => false,
|
||||
'message' => 'Error al actualizar carpeta: ' . $e->getMessage()
|
||||
], Response::HTTP_INTERNAL_SERVER_ERROR);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -60,6 +106,91 @@ class FolderController extends Controller
|
||||
*/
|
||||
public function destroy(Folder $folder)
|
||||
{
|
||||
//
|
||||
try {
|
||||
// Verificar permisos
|
||||
if (!Gate::allows('delete', $folder)) {
|
||||
return response()->json([
|
||||
'success' => false,
|
||||
'message' => 'No tienes permisos para eliminar esta carpeta'
|
||||
], Response::HTTP_FORBIDDEN);
|
||||
}
|
||||
|
||||
// Validar que esté vacía
|
||||
if ($folder->documents()->exists() || $folder->children()->exists()) {
|
||||
return response()->json([
|
||||
'success' => false,
|
||||
'message' => 'No puedes eliminar carpetas con contenido'
|
||||
], Response::HTTP_UNPROCESSABLE_ENTITY);
|
||||
}
|
||||
|
||||
// Eliminar
|
||||
$folder->delete();
|
||||
|
||||
return response()->json([
|
||||
'success' => true,
|
||||
'message' => 'Carpeta eliminada'
|
||||
]);
|
||||
|
||||
} catch (\Exception $e) {
|
||||
return response()->json([
|
||||
'success' => false,
|
||||
'message' => 'Error al eliminar carpeta: ' . $e->getMessage()
|
||||
], Response::HTTP_INTERNAL_SERVER_ERROR);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Move the specified folder to a new location.
|
||||
*/
|
||||
public function move(Folder $folder, Request $request)
|
||||
{
|
||||
try {
|
||||
// Verificar permisos
|
||||
if (!Gate::allows('move', $folder)) {
|
||||
return response()->json([
|
||||
'success' => false,
|
||||
'message' => 'No tienes permisos para esta acción'
|
||||
], Response::HTTP_FORBIDDEN);
|
||||
}
|
||||
|
||||
// Validación
|
||||
$validator = Validator::make($request->all(), [
|
||||
'parent_id' => 'nullable|exists:folders,id',
|
||||
'project_id' => 'required|exists:projects,id'
|
||||
]);
|
||||
|
||||
if ($validator->fails()) {
|
||||
return response()->json([
|
||||
'success' => false,
|
||||
'errors' => $validator->errors()
|
||||
], Response::HTTP_UNPROCESSABLE_ENTITY);
|
||||
}
|
||||
|
||||
// Prevenir movimiento a sí mismo o descendientes
|
||||
if ($request->parent_id && $folder->isDescendantOf($request->parent_id)) {
|
||||
return response()->json([
|
||||
'success' => false,
|
||||
'message' => 'No puedes mover una carpeta a su propia jerarquía'
|
||||
], Response::HTTP_UNPROCESSABLE_ENTITY);
|
||||
}
|
||||
|
||||
// Actualizar ubicación
|
||||
$folder->update([
|
||||
'parent_id' => $request->parent_id,
|
||||
'project_id' => $request->project_id
|
||||
]);
|
||||
|
||||
return response()->json([
|
||||
'success' => true,
|
||||
'message' => 'Carpeta movida exitosamente',
|
||||
'folder' => $folder->fresh()
|
||||
]);
|
||||
|
||||
} catch (\Exception $e) {
|
||||
return response()->json([
|
||||
'success' => false,
|
||||
'message' => 'Error al mover la carpeta: ' . $e->getMessage()
|
||||
], Response::HTTP_INTERNAL_SERVER_ERROR);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
65
app/Http/Controllers/GroupController.php
Normal file
65
app/Http/Controllers/GroupController.php
Normal file
@@ -0,0 +1,65 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers;
|
||||
|
||||
use App\Models\Group;
|
||||
use Illuminate\Http\Request;
|
||||
|
||||
class GroupController extends Controller
|
||||
{
|
||||
/**
|
||||
* Display a listing of the resource.
|
||||
*/
|
||||
public function index()
|
||||
{
|
||||
//
|
||||
}
|
||||
|
||||
/**
|
||||
* Show the form for creating a new resource.
|
||||
*/
|
||||
public function create()
|
||||
{
|
||||
//
|
||||
}
|
||||
|
||||
/**
|
||||
* Store a newly created resource in storage.
|
||||
*/
|
||||
public function store(Request $request)
|
||||
{
|
||||
//
|
||||
}
|
||||
|
||||
/**
|
||||
* Display the specified resource.
|
||||
*/
|
||||
public function show(Group $group)
|
||||
{
|
||||
//
|
||||
}
|
||||
|
||||
/**
|
||||
* Show the form for editing the specified resource.
|
||||
*/
|
||||
public function edit(Group $group)
|
||||
{
|
||||
//
|
||||
}
|
||||
|
||||
/**
|
||||
* Update the specified resource in storage.
|
||||
*/
|
||||
public function update(Request $request, Group $group)
|
||||
{
|
||||
//
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove the specified resource from storage.
|
||||
*/
|
||||
public function destroy(Group $group)
|
||||
{
|
||||
//
|
||||
}
|
||||
}
|
||||
@@ -2,6 +2,7 @@
|
||||
|
||||
namespace App\Http\Controllers;
|
||||
|
||||
use App\Http\Controllers\Controller; // <-- Asegúrate de tener esta línea
|
||||
use Illuminate\Http\Request;
|
||||
use Spatie\Permission\Models\Role;
|
||||
use Spatie\Permission\Models\Permission;
|
||||
@@ -12,24 +13,36 @@ class RoleController extends Controller
|
||||
public function index()
|
||||
{
|
||||
$this->authorize('viewAny', Role::class);
|
||||
|
||||
$roles = Role::withCount('users')->paginate(10);
|
||||
return view('roles.index', compact('roles'));
|
||||
}
|
||||
|
||||
public function create()
|
||||
{
|
||||
$this->authorize('create', Role::class);
|
||||
$permissions = Permission::all()->groupBy('group');
|
||||
$this->authorize('create roles');
|
||||
$permissions = Permission::all(['id', 'name']);
|
||||
return view('roles.create', compact('permissions'));
|
||||
}
|
||||
|
||||
public function store(StoreRoleRequest $request)
|
||||
public function store(Request $request)
|
||||
{
|
||||
$role = Role::create($request->only('name'));
|
||||
/*$role = Role::create($request->only('name'));
|
||||
$role->syncPermissions($request->permissions);
|
||||
|
||||
return redirect()->route('roles.index')
|
||||
->with('success', 'Rol creado exitosamente');
|
||||
->with('success', 'Rol creado exitosamente');*/
|
||||
|
||||
$this->authorize('create', Role::class);
|
||||
|
||||
$request->validate([
|
||||
'name' => 'required|unique:roles',
|
||||
'description' => 'required'
|
||||
]);
|
||||
|
||||
Role::create($request->all());
|
||||
|
||||
return redirect()->route('roles.index');
|
||||
}
|
||||
|
||||
public function edit(Role $role)
|
||||
@@ -41,7 +54,7 @@ class RoleController extends Controller
|
||||
return view('roles.edit', compact('role', 'permissions', 'rolePermissions'));
|
||||
}
|
||||
|
||||
public function update(StoreRoleRequest $request, Role $role)
|
||||
public function update(Request $request, Role $role)
|
||||
{
|
||||
$role->update($request->only('name'));
|
||||
$role->syncPermissions($request->permissions);
|
||||
|
||||
Reference in New Issue
Block a user