From 7cfc7749ccf71ce7ce95f75896e43baf0ce4b00b Mon Sep 17 00:00:00 2001 From: a6a2f5842 Date: Sun, 15 Jun 2025 11:56:28 +0200 Subject: [PATCH] A more files & structure --- composer.json | 17 +++++-- config/permissions.php | 7 ++- .../migrations/create_blax_role_tables.php | 47 +++++++++++++++++ pint.json | 4 ++ src/Models/Assignment.php | 7 +++ src/Models/Permission.php | 7 +++ src/Models/Role.php | 4 +- src/PermissionsServiceProvider.php | 50 +++++++++++++++++++ src/Traits/HasRoles.php | 32 ++++++++++++ 9 files changed, 166 insertions(+), 9 deletions(-) create mode 100644 database/migrations/create_blax_role_tables.php create mode 100644 pint.json create mode 100644 src/Models/Assignment.php create mode 100644 src/Models/Permission.php create mode 100644 src/Traits/HasRoles.php diff --git a/composer.json b/composer.json index 298695c..264fb29 100644 --- a/composer.json +++ b/composer.json @@ -6,7 +6,11 @@ "roles", "permission", "laravel", - "blax" + "blax", + "authorization", + "user management", + "access control", + "authentication" ], "homepage": "http://www.blax.at", "license": "MIT", @@ -14,6 +18,7 @@ { "name": "Fabian Wagner", "email": "fabian@blax.at", + "homepage": "https://www.blax.at", "role": "Developer" } ], @@ -23,8 +28,12 @@ } }, "require": { - "php": ">=8.2" - }, - "require-dev": { + "php": "^8.0", + "illuminate/auth": "^8.12|^9.0|^10.0|^11.0|^12.0", + "illuminate/container": "^8.12|^9.0|^10.0|^11.0|^12.0", + "illuminate/contracts": "^8.12|^9.0|^10.0|^11.0|^12.0", + "illuminate/database": "^8.12|^9.0|^10.0|^11.0|^12.0", + "illuminate/support": "^8.12|^9.0|^10.0|^11.0|^12.0", + "laravel/pint": "^1.22" } } \ No newline at end of file diff --git a/config/permissions.php b/config/permissions.php index ff9eac2..18ebe4a 100644 --- a/config/permissions.php +++ b/config/permissions.php @@ -1,10 +1,12 @@ [ - 'role' => YourVendor\Permissions\Models\Role::class, - 'permission' => YourVendor\Permissions\Models\Permission::class, + 'role' => \Blax\Roles\Models\Role::class, + 'permission' => \Blax\Roles\Models\Permission::class, ], + 'table_names' => [ 'roles' => 'roles', 'permissions' => 'permissions', @@ -12,4 +14,5 @@ return [ 'model_has_permissions' => 'model_has_permissions', 'role_has_permissions' => 'role_has_permissions', ], + ]; diff --git a/database/migrations/create_blax_role_tables.php b/database/migrations/create_blax_role_tables.php new file mode 100644 index 0000000..9a4919f --- /dev/null +++ b/database/migrations/create_blax_role_tables.php @@ -0,0 +1,47 @@ +id(); + $table->string('name')->unique(); + $table->string('description')->nullable(); + $table->timestamps(); + }); + + Schema::create('permissions', function (Blueprint $table) { + $table->id(); + $table->string('name')->unique(); + $table->string('description')->nullable(); + $table->timestamps(); + }); + + Schema::create('assignments', function (Blueprint $table) { + $table->morphs('affected'); + $table->morphs('assignment'); + $table->timestamp('expires_at')->nullable(); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + // + } +}; diff --git a/pint.json b/pint.json new file mode 100644 index 0000000..4ee3110 --- /dev/null +++ b/pint.json @@ -0,0 +1,4 @@ +{ + "preset": "laravel", + "rules": {} +} \ No newline at end of file diff --git a/src/Models/Assignment.php b/src/Models/Assignment.php new file mode 100644 index 0000000..e3375aa --- /dev/null +++ b/src/Models/Assignment.php @@ -0,0 +1,7 @@ +offerPublishing(); + + } + + /** + * Bootstrap the application events. + * + * @return void + */ + public function boot() + { + // Load routes, migrations, etc. if needed + } + + /** + * Set up the publishing of configuration files. + * + * @return void + */ + protected function offerPublishing() + { + if (! $this->app->runningInConsole()) { + return; + } + + if (! function_exists('config_path')) { + // function not available and 'publish' not relevant in Lumen + return; + } + + $this->publishes([ + __DIR__.'/../config/permission.php' => config_path('permission.php'), + ], 'permission-config'); + + $this->publishes([ + __DIR__.'/../database/migrations/create_permission_tables.php.stub' => $this->getMigrationFileName('create_permission_tables.php'), + ], 'permission-migrations'); + } +} diff --git a/src/Traits/HasRoles.php b/src/Traits/HasRoles.php new file mode 100644 index 0000000..bad7918 --- /dev/null +++ b/src/Traits/HasRoles.php @@ -0,0 +1,32 @@ +belongsToMany( + config('permissions.models.role'), + config('permissions.table_names.model_has_roles'), + 'model_id', + 'role_id' + ); + } + + /** + * Check if the model has a specific role. + * + * @param string $role + * @return bool + */ + public function hasRole($role) + { + return $this->roles()->where('name', $role)->exists(); + } +}