From c7ac4ba41e80fa97186182362191944f710fe765 Mon Sep 17 00:00:00 2001 From: xiaomlove Date: Wed, 17 Aug 2022 16:01:55 +0800 Subject: [PATCH] cresate role basic tables --- app/Console/Commands/Test.php | 4 +- .../Permission/PermissionResource.php | 68 ++++++++++++++++ .../Pages/ManagePermissions.php | 21 +++++ .../Resources/Permission/RoleResource.php | 79 +++++++++++++++++++ .../RoleResource/Pages/CreateRole.php | 12 +++ .../RoleResource/Pages/EditRole.php | 19 +++++ .../RoleResource/Pages/ListRoles.php | 20 +++++ app/Models/Permission.php | 11 +++ app/Models/Role.php | 37 +++++++++ app/Models/RolePermission.php | 11 +++ app/Models/User.php | 25 +++++- app/Models/UserPermission.php | 11 +++ app/Models/UserRole.php | 11 +++ app/Providers/AppServiceProvider.php | 1 + .../2022_08_17_052202_create_roles_table.php | 33 ++++++++ ..._08_17_052422_create_permissions_table.php | 32 ++++++++ ...7_052512_create_role_permissions_table.php | 33 ++++++++ ...2_08_17_052650_create_user_roles_table.php | 33 ++++++++ ...7_052746_create_user_permissions_table.php | 34 ++++++++ resources/lang/zh_CN/admin.php | 4 +- 20 files changed, 492 insertions(+), 7 deletions(-) create mode 100644 app/Filament/Resources/Permission/PermissionResource.php create mode 100644 app/Filament/Resources/Permission/PermissionResource/Pages/ManagePermissions.php create mode 100644 app/Filament/Resources/Permission/RoleResource.php create mode 100644 app/Filament/Resources/Permission/RoleResource/Pages/CreateRole.php create mode 100644 app/Filament/Resources/Permission/RoleResource/Pages/EditRole.php create mode 100644 app/Filament/Resources/Permission/RoleResource/Pages/ListRoles.php create mode 100644 app/Models/Permission.php create mode 100644 app/Models/Role.php create mode 100644 app/Models/RolePermission.php create mode 100644 app/Models/UserPermission.php create mode 100644 app/Models/UserRole.php create mode 100644 database/migrations/2022_08_17_052202_create_roles_table.php create mode 100644 database/migrations/2022_08_17_052422_create_permissions_table.php create mode 100644 database/migrations/2022_08_17_052512_create_role_permissions_table.php create mode 100644 database/migrations/2022_08_17_052650_create_user_roles_table.php create mode 100644 database/migrations/2022_08_17_052746_create_user_permissions_table.php diff --git a/app/Console/Commands/Test.php b/app/Console/Commands/Test.php index 1c78f116..f628be9b 100644 --- a/app/Console/Commands/Test.php +++ b/app/Console/Commands/Test.php @@ -13,6 +13,7 @@ use App\Models\ExamUser; use App\Models\HitAndRun; use App\Models\Medal; use App\Models\Peer; +use App\Models\Role; use App\Models\SearchBox; use App\Models\Snatch; use App\Models\Tag; @@ -86,8 +87,7 @@ class Test extends Command */ public function handle() { - $r = date('P'); - dd($r); + Role::initClassRoles(); } diff --git a/app/Filament/Resources/Permission/PermissionResource.php b/app/Filament/Resources/Permission/PermissionResource.php new file mode 100644 index 00000000..00a0fb36 --- /dev/null +++ b/app/Filament/Resources/Permission/PermissionResource.php @@ -0,0 +1,68 @@ +schema([ + // + ]); + } + + public static function table(Table $table): Table + { + return $table + ->columns([ + // + ]) + ->filters([ + // + ]) + ->actions([ + Tables\Actions\EditAction::make(), + Tables\Actions\DeleteAction::make(), + ]) + ->bulkActions([ + Tables\Actions\DeleteBulkAction::make(), + ]); + } + + public static function getPages(): array + { + return [ + 'index' => Pages\ManagePermissions::route('/'), + ]; + } +} diff --git a/app/Filament/Resources/Permission/PermissionResource/Pages/ManagePermissions.php b/app/Filament/Resources/Permission/PermissionResource/Pages/ManagePermissions.php new file mode 100644 index 00000000..15c650a0 --- /dev/null +++ b/app/Filament/Resources/Permission/PermissionResource/Pages/ManagePermissions.php @@ -0,0 +1,21 @@ +schema([ + // + ]); + } + + public static function table(Table $table): Table + { + return $table + ->columns([ + Tables\Columns\TextColumn::make('id'), + Tables\Columns\TextColumn::make('name')->label(__('label.name')), + Tables\Columns\TextColumn::make('classText')->label(__('label.role.class')), + Tables\Columns\TextColumn::make('updated_at')->label(__('label.updated_at')), + ]) + ->filters([ + // + ]) + ->actions([ + Tables\Actions\EditAction::make(), + ]) + ->bulkActions([ + Tables\Actions\DeleteBulkAction::make(), + ]); + } + + public static function getRelations(): array + { + return [ + // + ]; + } + + public static function getPages(): array + { + return [ + 'index' => Pages\ListRoles::route('/'), + 'create' => Pages\CreateRole::route('/create'), + 'edit' => Pages\EditRole::route('/{record}/edit'), + ]; + } +} diff --git a/app/Filament/Resources/Permission/RoleResource/Pages/CreateRole.php b/app/Filament/Resources/Permission/RoleResource/Pages/CreateRole.php new file mode 100644 index 00000000..98b4d99a --- /dev/null +++ b/app/Filament/Resources/Permission/RoleResource/Pages/CreateRole.php @@ -0,0 +1,12 @@ +hasMany(Permission::class, 'role_id'); + } + + public function getClassTextAttribute() + { + if ($this->class < 0) { + return ''; + } + return User::getClassText($this->class); + } + + public static function initClassRoles() + { + foreach (User::$classes as $class => $info) { + $attributes = [ + 'class' => $class + ]; + $values = [ + 'name' => $info['text'], + ]; + Role::query()->firstOrCreate($attributes, $values); + } + } + +} diff --git a/app/Models/RolePermission.php b/app/Models/RolePermission.php new file mode 100644 index 00000000..6254aaaa --- /dev/null +++ b/app/Models/RolePermission.php @@ -0,0 +1,11 @@ +class]['text'])) { + return self::getClassText($this->class); + } + + public static function getClassText($class) + { + if (!isset(self::$classes[$class])) { return ''; } - $classText = self::$classes[$this->class]['text']; - $alias = Setting::get("account.{$this->class}_alias"); + if ($class >= self::CLASS_VIP) { + $classText = nexus_trans('user.class_names.' . $class); + } else { + $classText = self::$classes[$class]['text']; + } + $alias = Setting::get("account.{$class}_alias"); if (!empty($alias)) { $classText .= "({$alias})"; } @@ -449,6 +458,16 @@ class User extends Authenticatable implements FilamentUser, HasName return $this->hasMany(UsernameChangeLog::class, 'uid'); } + public function roles() + { + return $this->belongsToMany(Role::class, 'user_roles', 'uid', 'role_id')->withTimestamps(); + } + + public function permissions() + { + return $this->belongsToMany(Permission::class, 'user_permissions', 'uid', 'permission_id')->withTimestamps(); + } + public function getAvatarAttribute($value) { if ($value) { diff --git a/app/Models/UserPermission.php b/app/Models/UserPermission.php new file mode 100644 index 00000000..b8c2954d --- /dev/null +++ b/app/Models/UserPermission.php @@ -0,0 +1,11 @@ +id(); + $table->string('name'); + $table->integer('class')->default(-1); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('roles'); + } +}; diff --git a/database/migrations/2022_08_17_052422_create_permissions_table.php b/database/migrations/2022_08_17_052422_create_permissions_table.php new file mode 100644 index 00000000..526d0a38 --- /dev/null +++ b/database/migrations/2022_08_17_052422_create_permissions_table.php @@ -0,0 +1,32 @@ +id(); + $table->string('name'); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('permissions'); + } +}; diff --git a/database/migrations/2022_08_17_052512_create_role_permissions_table.php b/database/migrations/2022_08_17_052512_create_role_permissions_table.php new file mode 100644 index 00000000..9dac41e9 --- /dev/null +++ b/database/migrations/2022_08_17_052512_create_role_permissions_table.php @@ -0,0 +1,33 @@ +id(); + $table->integer('role_id'); + $table->integer('permission_id'); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('role_permissions'); + } +}; diff --git a/database/migrations/2022_08_17_052650_create_user_roles_table.php b/database/migrations/2022_08_17_052650_create_user_roles_table.php new file mode 100644 index 00000000..b7535b40 --- /dev/null +++ b/database/migrations/2022_08_17_052650_create_user_roles_table.php @@ -0,0 +1,33 @@ +id(); + $table->integer('uid'); + $table->integer('role_id'); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('user_roles'); + } +}; diff --git a/database/migrations/2022_08_17_052746_create_user_permissions_table.php b/database/migrations/2022_08_17_052746_create_user_permissions_table.php new file mode 100644 index 00000000..b1fbbb92 --- /dev/null +++ b/database/migrations/2022_08_17_052746_create_user_permissions_table.php @@ -0,0 +1,34 @@ +id(); + $table->integer('uid'); + $table->integer('permission_id'); + $table->text('payload'); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('user_permissions'); + } +}; diff --git a/resources/lang/zh_CN/admin.php b/resources/lang/zh_CN/admin.php index e7b0a741..d7772247 100644 --- a/resources/lang/zh_CN/admin.php +++ b/resources/lang/zh_CN/admin.php @@ -15,8 +15,6 @@ return [ 'claims' => '用户认领', 'torrent_list' => '种子', 'torrent_state' => '全站优惠', - 'roles_list' => '角色', - 'ability_list' => '权限', 'seed_box_records' => 'SeedBox', 'upload_speed' => '上行带宽', 'download_speed' => '下行带宽', @@ -24,6 +22,8 @@ return [ 'menu' => '自定义菜单', 'username_change_log' => '改名记录', 'torrent_deny_reason' => '拒绝原因', + 'roles' => '角色', + 'permissions' => '权限', ], 'resources' => [ 'agent_allow' => [