From e31722d029f2d4bb3b9da5f706de32da502f805d Mon Sep 17 00:00:00 2001 From: Mohammad Mortazavi Date: Sun, 2 Feb 2025 09:53:56 +0330 Subject: [PATCH 1/4] Update composer.json --- composer.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/composer.json b/composer.json index 2a5a634..4449713 100644 --- a/composer.json +++ b/composer.json @@ -19,7 +19,7 @@ ], "require": { "php": "^8.1", - "spatie/laravel-permission": "^5.8", + "spatie/laravel-permission": "^6.0", "mavinoo/laravel-batch": "^2.3" }, "require-dev": { From 5559fa42abd8b2b8c8b5d9d8211a2b05492433d5 Mon Sep 17 00:00:00 2001 From: Mohammad Mortazavi Date: Sun, 2 Feb 2025 09:54:08 +0330 Subject: [PATCH 2/4] Update tests; --- .../migrations/create_permission_tables.php | 305 ++++++++---------- 1 file changed, 131 insertions(+), 174 deletions(-) diff --git a/tests/Core/migrations/create_permission_tables.php b/tests/Core/migrations/create_permission_tables.php index a95f776..69da512 100644 --- a/tests/Core/migrations/create_permission_tables.php +++ b/tests/Core/migrations/create_permission_tables.php @@ -1,183 +1,140 @@ engine('InnoDB'); + $table->bigIncrements('id'); // permission id + $table->string('name'); // For MyISAM use string('name', 225); // (or 166 for InnoDB with Redundant/Compact row format) + $table->string('guard_name'); // For MyISAM use string('guard_name', 25); + $table->timestamps(); + + $table->unique(['name', 'guard_name']); + }); + + Schema::create($tableNames['roles'], function (Blueprint $table) use ($teams, $columnNames) { + //$table->engine('InnoDB'); + $table->bigIncrements('id'); // role id + if ($teams || config('permission.testing')) { // permission.testing is a fix for sqlite testing + $table->unsignedBigInteger($columnNames['team_foreign_key'])->nullable(); + $table->index($columnNames['team_foreign_key'], 'roles_team_foreign_key_index'); } - if ($teams && empty($columnNames['team_foreign_key'] ?? null)) { - throw new \Exception('Error: team_foreign_key on config/permission.php not loaded. Run [php artisan config:clear] and try again.'); + $table->string('name'); // For MyISAM use string('name', 225); // (or 166 for InnoDB with Redundant/Compact row format) + $table->string('guard_name'); // For MyISAM use string('guard_name', 25); + $table->timestamps(); + if ($teams || config('permission.testing')) { + $table->unique([$columnNames['team_foreign_key'], 'name', 'guard_name']); + } else { + $table->unique(['name', 'guard_name']); + } + }); + + Schema::create($tableNames['model_has_permissions'], function (Blueprint $table) use ($tableNames, $columnNames, $pivotPermission, $teams) { + $table->unsignedBigInteger($pivotPermission); + + $table->string('model_type'); + $table->unsignedBigInteger($columnNames['model_morph_key']); + $table->index([$columnNames['model_morph_key'], 'model_type'], 'model_has_permissions_model_id_model_type_index'); + + $table->foreign($pivotPermission) + ->references('id') // permission id + ->on($tableNames['permissions']) + ->onDelete('cascade'); + if ($teams) { + $table->unsignedBigInteger($columnNames['team_foreign_key']); + $table->index($columnNames['team_foreign_key'], 'model_has_permissions_team_foreign_key_index'); + + $table->primary([$columnNames['team_foreign_key'], $pivotPermission, $columnNames['model_morph_key'], 'model_type'], + 'model_has_permissions_permission_model_type_primary'); + } else { + $table->primary([$pivotPermission, $columnNames['model_morph_key'], 'model_type'], + 'model_has_permissions_permission_model_type_primary'); } - Schema::create($tableNames['permissions'], function (Blueprint $table) { - $table->bigIncrements('id'); // permission id - $table->string('name'); // For MySQL 8.0 use string('name', 125); - $table->string('guard_name'); // For MySQL 8.0 use string('guard_name', 125); - $table->timestamps(); + }); - $table->unique(['name', 'guard_name']); - }); - - Schema::create($tableNames['roles'], function (Blueprint $table) use ($teams, $columnNames) { - $table->bigIncrements('id'); // role id - if ($teams || config('permission.testing')) { // permission.testing is a fix for sqlite testing - $table->unsignedBigInteger($columnNames['team_foreign_key'])->nullable(); - $table->index($columnNames['team_foreign_key'], 'roles_team_foreign_key_index'); - } - $table->string('name'); // For MySQL 8.0 use string('name', 125); - $table->string('guard_name'); // For MySQL 8.0 use string('guard_name', 125); - $table->timestamps(); - if ($teams || config('permission.testing')) { - $table->unique([$columnNames['team_foreign_key'], 'name', 'guard_name']); - } else { - $table->unique(['name', 'guard_name']); - } - }); - - Schema::create( - $tableNames['model_has_permissions'], - function (Blueprint $table) use ($tableNames, $columnNames, $teams) { - $table->unsignedBigInteger(PermissionRegistrar::$pivotPermission); - - $table->string('model_type'); - $table->unsignedBigInteger($columnNames['model_morph_key']); - $table->index( - [$columnNames['model_morph_key'], 'model_type'], - 'model_has_permissions_model_id_model_type_index' - ); - - $table->foreign(PermissionRegistrar::$pivotPermission) - ->references('id') // permission id - ->on($tableNames['permissions']) - ->onDelete('cascade'); - if ($teams) { - $table->unsignedBigInteger($columnNames['team_foreign_key']); - $table->index( - $columnNames['team_foreign_key'], - 'model_has_permissions_team_foreign_key_index' - ); - - $table->primary( - [ - $columnNames['team_foreign_key'], - PermissionRegistrar::$pivotPermission, - $columnNames['model_morph_key'], - 'model_type', - ], - 'model_has_permissions_permission_model_type_primary' - ); - } else { - $table->primary( - [ - PermissionRegistrar::$pivotPermission, - $columnNames['model_morph_key'], - 'model_type', - ], - 'model_has_permissions_permission_model_type_primary' - ); - } - } - ); - - Schema::create( - $tableNames['model_has_roles'], - function (Blueprint $table) use ($tableNames, $columnNames, $teams) { - $table->unsignedBigInteger(PermissionRegistrar::$pivotRole); - - $table->string('model_type'); - $table->unsignedBigInteger($columnNames['model_morph_key']); - $table->index( - [$columnNames['model_morph_key'], 'model_type'], - 'model_has_roles_model_id_model_type_index' - ); - - $table->foreign(PermissionRegistrar::$pivotRole) - ->references('id') // role id - ->on($tableNames['roles']) - ->onDelete('cascade'); - if ($teams) { - $table->unsignedBigInteger($columnNames['team_foreign_key']); - $table->index($columnNames['team_foreign_key'], 'model_has_roles_team_foreign_key_index'); - - $table->primary( - [ - $columnNames['team_foreign_key'], - PermissionRegistrar::$pivotRole, - $columnNames['model_morph_key'], - 'model_type', - ], - 'model_has_roles_role_model_type_primary' - ); - } else { - $table->primary( - [ - PermissionRegistrar::$pivotRole, - $columnNames['model_morph_key'], - 'model_type', - ], - 'model_has_roles_role_model_type_primary' - ); - } - } - ); - - Schema::create($tableNames['role_has_permissions'], function (Blueprint $table) use ($tableNames) { - $table->unsignedBigInteger(PermissionRegistrar::$pivotPermission); - $table->unsignedBigInteger(PermissionRegistrar::$pivotRole); - - $table->foreign(PermissionRegistrar::$pivotPermission) - ->references('id') // permission id - ->on($tableNames['permissions']) - ->onDelete('cascade'); - - $table->foreign(PermissionRegistrar::$pivotRole) - ->references('id') // role id - ->on($tableNames['roles']) - ->onDelete('cascade'); - - $table->primary( - [PermissionRegistrar::$pivotPermission, PermissionRegistrar::$pivotRole], - 'role_has_permissions_permission_id_role_id_primary' - ); - }); - - app('cache') - ->store(config('permission.cache.store') != 'default' ? config('permission.cache.store') : null) - ->forget(config('permission.cache.key')); - } + Schema::create($tableNames['model_has_roles'], function (Blueprint $table) use ($tableNames, $columnNames, $pivotRole, $teams) { + $table->unsignedBigInteger($pivotRole); - /** - * Reverse the migrations. - * - * @return void - */ - public function down() - { - $tableNames = config('permission.table_names'); - - if (empty($tableNames)) { - throw new \Exception('Error: config/permission.php not found and defaults could not be merged. Please publish the package configuration before proceeding, or drop the tables manually.'); - } + $table->string('model_type'); + $table->unsignedBigInteger($columnNames['model_morph_key']); + $table->index([$columnNames['model_morph_key'], 'model_type'], 'model_has_roles_model_id_model_type_index'); + + $table->foreign($pivotRole) + ->references('id') // role id + ->on($tableNames['roles']) + ->onDelete('cascade'); + if ($teams) { + $table->unsignedBigInteger($columnNames['team_foreign_key']); + $table->index($columnNames['team_foreign_key'], 'model_has_roles_team_foreign_key_index'); - Schema::drop($tableNames['role_has_permissions']); - Schema::drop($tableNames['model_has_roles']); - Schema::drop($tableNames['model_has_permissions']); - Schema::drop($tableNames['roles']); - Schema::drop($tableNames['permissions']); + $table->primary([$columnNames['team_foreign_key'], $pivotRole, $columnNames['model_morph_key'], 'model_type'], + 'model_has_roles_role_model_type_primary'); + } else { + $table->primary([$pivotRole, $columnNames['model_morph_key'], 'model_type'], + 'model_has_roles_role_model_type_primary'); + } + }); + + Schema::create($tableNames['role_has_permissions'], function (Blueprint $table) use ($tableNames, $pivotRole, $pivotPermission) { + $table->unsignedBigInteger($pivotPermission); + $table->unsignedBigInteger($pivotRole); + + $table->foreign($pivotPermission) + ->references('id') // permission id + ->on($tableNames['permissions']) + ->onDelete('cascade'); + + $table->foreign($pivotRole) + ->references('id') // role id + ->on($tableNames['roles']) + ->onDelete('cascade'); + + $table->primary([$pivotPermission, $pivotRole], 'role_has_permissions_permission_id_role_id_primary'); + }); + + app('cache') + ->store(config('permission.cache.store') != 'default' ? config('permission.cache.store') : null) + ->forget(config('permission.cache.key')); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + $tableNames = config('permission.table_names'); + + if (empty($tableNames)) { + throw new \Exception('Error: config/permission.php not found and defaults could not be merged. Please publish the package configuration before proceeding, or drop the tables manually.'); } - }; + + Schema::drop($tableNames['role_has_permissions']); + Schema::drop($tableNames['model_has_roles']); + Schema::drop($tableNames['model_has_permissions']); + Schema::drop($tableNames['roles']); + Schema::drop($tableNames['permissions']); + } +}; \ No newline at end of file From 62d37e64aa556b3583bc75edf9d8094a4d24c96b Mon Sep 17 00:00:00 2001 From: Mohammad Mortazavi Date: Sun, 2 Feb 2025 09:54:24 +0330 Subject: [PATCH 3/4] Add capability table to README; --- README.md | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 108dfb8..a9a0986 100644 --- a/README.md +++ b/README.md @@ -18,12 +18,18 @@ Features: - Create permissions for a model based on related policy class - Assign permissions to roles in a breeze +| Version | Laravel | +|:-------:|:-------:| +| 1.x | 10.x | +| 2.x | 11.x | + + ## Installation First install the package via composer ```shell -composer require hans-thomas/horus:^1.0 +composer require hans-thomas/horus ``` Then, publish the configuration file From 4491b6dfb9e431ac55d25f05df506e0bca145c9b Mon Sep 17 00:00:00 2001 From: StyleCI Bot Date: Sun, 2 Feb 2025 06:24:34 +0000 Subject: [PATCH 4/4] Apply fixes from StyleCI --- .../migrations/create_permission_tables.php | 34 +++++++++++-------- 1 file changed, 20 insertions(+), 14 deletions(-) diff --git a/tests/Core/migrations/create_permission_tables.php b/tests/Core/migrations/create_permission_tables.php index 69da512..d8da1e3 100644 --- a/tests/Core/migrations/create_permission_tables.php +++ b/tests/Core/migrations/create_permission_tables.php @@ -1,11 +1,10 @@ unsignedBigInteger($columnNames['team_foreign_key']); $table->index($columnNames['team_foreign_key'], 'model_has_permissions_team_foreign_key_index'); - $table->primary([$columnNames['team_foreign_key'], $pivotPermission, $columnNames['model_morph_key'], 'model_type'], - 'model_has_permissions_permission_model_type_primary'); + $table->primary( + [$columnNames['team_foreign_key'], $pivotPermission, $columnNames['model_morph_key'], 'model_type'], + 'model_has_permissions_permission_model_type_primary' + ); } else { - $table->primary([$pivotPermission, $columnNames['model_morph_key'], 'model_type'], - 'model_has_permissions_permission_model_type_primary'); + $table->primary( + [$pivotPermission, $columnNames['model_morph_key'], 'model_type'], + 'model_has_permissions_permission_model_type_primary' + ); } - }); Schema::create($tableNames['model_has_roles'], function (Blueprint $table) use ($tableNames, $columnNames, $pivotRole, $teams) { @@ -90,11 +92,15 @@ public function up(): void $table->unsignedBigInteger($columnNames['team_foreign_key']); $table->index($columnNames['team_foreign_key'], 'model_has_roles_team_foreign_key_index'); - $table->primary([$columnNames['team_foreign_key'], $pivotRole, $columnNames['model_morph_key'], 'model_type'], - 'model_has_roles_role_model_type_primary'); + $table->primary( + [$columnNames['team_foreign_key'], $pivotRole, $columnNames['model_morph_key'], 'model_type'], + 'model_has_roles_role_model_type_primary' + ); } else { - $table->primary([$pivotRole, $columnNames['model_morph_key'], 'model_type'], - 'model_has_roles_role_model_type_primary'); + $table->primary( + [$pivotRole, $columnNames['model_morph_key'], 'model_type'], + 'model_has_roles_role_model_type_primary' + ); } }); @@ -137,4 +143,4 @@ public function down(): void Schema::drop($tableNames['roles']); Schema::drop($tableNames['permissions']); } -}; \ No newline at end of file +};