añadir funicionalidades de permisos y grupos
Some checks failed
linter / quality (push) Has been cancelled
tests / ci (push) Has been cancelled

This commit is contained in:
2025-04-27 23:43:22 +02:00
parent fa7c92bee2
commit 883daf32ed
51 changed files with 2673 additions and 441 deletions

View File

@@ -0,0 +1,48 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*/
public function up(): void
{
Schema::create('groups', function (Blueprint $table) {
$table->id();
$table->string('name')->unique();
$table->text('description')->nullable();
$table->timestamps();
$table->softDeletes();
});
Schema::create('group_user', function (Blueprint $table) {
$table->foreignId('group_id')->constrained()->onDelete('cascade');
$table->foreignId('user_id')->constrained()->onDelete('cascade');
$table->timestamps();
$table->primary(['group_id', 'user_id']);
});
Schema::create('group_has_permissions', function (Blueprint $table) {
$table->foreignId('group_id')->constrained()->onDelete('cascade');
$table->foreignId('permission_id')->constrained()->onDelete('cascade');
$table->timestamps();
$table->primary(['group_id', 'permission_id']);
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::dropIfExists('groups');
Schema::dropIfExists('group_user');
Schema::dropIfExists('group_has_permissions');
}
};

View File

@@ -11,11 +11,8 @@ return new class extends Migration
*/
public function up(): void
{
Schema::create('category_project', function (Blueprint $table) {
$table->id();
$table->foreignId('project_id')->constrained();
$table->foreignId('category_id')->constrained();
$table->timestamps();
Schema::table('users', function (Blueprint $table) {
$table->softDeletes();
});
}
@@ -24,6 +21,9 @@ return new class extends Migration
*/
public function down(): void
{
Schema::dropIfExists('category_project');
Schema::table('users', function (Blueprint $table) {
$table->dropSoftDeletes();
});
}
};

View File

@@ -14,12 +14,34 @@ class PermissionSeeder extends Seeder
public function run()
{
$permissions = [
// Permissions for Projects
'create projects',
'edit projects',
'delete projects',
'view projects',
// Permissions for Documents
'create projects',
'edit projects',
'delete projects',
'view projects',
'manage users',
'approve documents',
'manage users',
// Permissions for roles
'view roles',
'create roles',
'edit roles',
'delete roles',
// Permissions for permissions
'view permissions',
'create permissions',
'edit permissions',
'delete permissions',
'assign permissions',
'revoke permissions',
];
foreach ($permissions as $permission) {

View File

@@ -2,6 +2,7 @@
namespace Database\Seeders;
use App\Models\User;
use Illuminate\Database\Console\Seeds\WithoutModelEvents;
use Illuminate\Database\Seeder;
use Spatie\Permission\Models\Permission;
@@ -15,18 +16,71 @@ class RolePermissionSeeder extends Seeder
public function run(): void
{
// database/seeders/RolePermissionSeeder.php
$admin = Role::firstOrCreate([
'name' => 'admin',
'guard_name' => 'web'
]);
$permission = Permission::firstOrCreate([
'name' => 'create projects',
'guard_name' => 'web'
]);
// Asignar TODOS los permisos
$admin->givePermissionTo(Permission::all());
// Crear rol de administrador
$adminRole = Role::updateOrCreate(
['name' => 'admin'],
//['description' => 'Administrador del sistema']
);
// Obtener o crear todos los permisos existentes
$permissions = Permission::all();
if ($permissions->isEmpty()) {
// Crear permisos básicos si no existen
$permissions = collect([
'view projects',
'edit projects',
'delete projects',
'view roles',
'create roles',
'edit roles',
'delete roles',
'view permissions',
'create permissions',
'edit permissions',
'delete permissions',
'assign permissions',
'revoke permissions',
])->map(function ($permission) {
return Permission::updateOrCreate(
['name' => $permission],
['guard_name' => 'web']
);
});
}
// Sincronizar todos los permisos con el rol admin
$allPermissions = Permission::all();
$adminRole->syncPermissions($allPermissions);
$adminRole->syncPermissions($permissions);
// Crear usuario admin si no existe
/*User::updateOrCreate(
['email' => env('ADMIN_EMAIL', 'admin@example.com')],
[
'name' => 'Administrador',
'password' => bcrypt(env('ADMIN_PASSWORD', 'password')),
'email_verified_at' => now()
]
)->assignRole($adminRole);*/
$adminEmail = env('ADMIN_EMAIL', 'admin@example.com');
$user = User::where('email', $adminEmail)->first();
if ($user) {
// Asignar rol solo si no lo tiene
if (!$user->hasRole($adminRole)) {
$user->assignRole($adminRole);
}
} else {
// Crear solo si no existe
User::create([
'name' => 'admin',
'email' => $adminEmail,
'password' => bcrypt(env('ADMIN_PASSWORD', '12345678')),
'email_verified_at' => now()
])->assignRole($adminRole);
}
}
}