diff --git a/app/Console/Commands/Upgrade/CreateGroupMemberships.php b/app/Console/Commands/Upgrade/CreateGroupMemberships.php index 03c8569f36..73e69ec74a 100644 --- a/app/Console/Commands/Upgrade/CreateGroupMemberships.php +++ b/app/Console/Commands/Upgrade/CreateGroupMemberships.php @@ -101,7 +101,7 @@ class CreateGroupMemberships extends Command private function createGroupMembership(User $user): void { $userGroup = UserGroup::create(['title' => $user->email]); - $userRole = UserRole::where('title', UserRole::FULL)->first(); + $userRole = UserRole::where('title', UserRole::OWNER)->first(); if (null === $userRole) { throw new FireflyException('Firefly III could not find a user role. Please make sure all validations have run.'); @@ -117,6 +117,9 @@ class CreateGroupMemberships extends Command if (null === $membership) { throw new FireflyException('Firefly III could not create user group management object. Please make sure all validations have run.'); } + $user->user_group_id = $userGroup->id; + $user->save(); + Log::debug(sprintf('User #%d now has main group.', $user->id)); } diff --git a/app/Handlers/Events/UserEventHandler.php b/app/Handlers/Events/UserEventHandler.php index df5a6db661..5662c34328 100644 --- a/app/Handlers/Events/UserEventHandler.php +++ b/app/Handlers/Events/UserEventHandler.php @@ -262,7 +262,7 @@ class UserEventHandler $user = $event->user; // create a new group. $group = UserGroup::create(['title' => $user->email]); - $role = UserRole::where('title', UserRole::FULL)->first(); + $role = UserRole::where('title', UserRole::OWNER)->first(); if (null === $role) { throw new FireflyException('The user role is unexpectedly empty. Did you run all migrations?'); } @@ -273,6 +273,8 @@ class UserEventHandler 'user_role_id' => $role->id, ] ); + $user->user_group_id = $group->id; + $user->save(); return true; } diff --git a/app/Models/UserRole.php b/app/Models/UserRole.php index 1ddf1252f8..499ff75f56 100644 --- a/app/Models/UserRole.php +++ b/app/Models/UserRole.php @@ -36,6 +36,7 @@ class UserRole extends Model public const CHANGE_REPETITIONS = 'change_reps'; public const VIEW_REPORTS = 'view_reports'; public const FULL = 'full'; + public const OWNER = 'owner'; protected $fillable = ['title']; /** diff --git a/app/User.php b/app/User.php index f6eaf697dd..6fc8901162 100644 --- a/app/User.php +++ b/app/User.php @@ -46,8 +46,10 @@ use FireflyIII\Models\Tag; use FireflyIII\Models\Transaction; use FireflyIII\Models\TransactionGroup; use FireflyIII\Models\TransactionJournal; +use FireflyIII\Models\UserGroup; use FireflyIII\Models\Webhook; use Illuminate\Database\Eloquent\Builder; +use Illuminate\Database\Eloquent\Relations\BelongsTo; use Illuminate\Database\Eloquent\Relations\BelongsToMany; use Illuminate\Database\Eloquent\Relations\HasMany; use Illuminate\Database\Eloquent\Relations\HasManyThrough; @@ -311,6 +313,14 @@ class User extends Authenticatable return $this->hasMany(Category::class); } + /** + * @codeCoverageIgnore + * @return BelongsTo + */ + public function userGroup(): BelongsTo + { + return $this->belongsTo(UserGroup::class,); + } /** * @codeCoverageIgnore * Link to currency exchange rates diff --git a/config/user_roles.php b/config/user_roles.php index 033d0a8693..4d3296b182 100644 --- a/config/user_roles.php +++ b/config/user_roles.php @@ -32,5 +32,6 @@ return [ UserRole::CHANGE_REPETITIONS => [], UserRole::VIEW_REPORTS => [], UserRole::FULL => [], + UserRole::OWNER => [], ], ]; \ No newline at end of file diff --git a/database/migrations/2021_08_28_073733_user_groups.php b/database/migrations/2021_08_28_073733_user_groups.php index c981a64e14..890a742be2 100644 --- a/database/migrations/2021_08_28_073733_user_groups.php +++ b/database/migrations/2021_08_28_073733_user_groups.php @@ -2,6 +2,7 @@ use Illuminate\Database\Migrations\Migration; use Illuminate\Database\Schema\Blueprint; +use Illuminate\Support\Facades\Schema; /** * Class UserGroups @@ -15,6 +16,17 @@ class UserGroups extends Migration */ public function down() { + Schema::table( + 'users', function (Blueprint $table) { + + $table->dropForeign('type_user_group_id'); + if (Schema::hasColumn('users', 'user_group_id')) { + $table->dropColumn('user_group_id'); + } + + } + ); + Schema::dropIfExists('group_memberships'); Schema::dropIfExists('user_roles'); Schema::dropIfExists('user_groups'); @@ -69,6 +81,14 @@ class UserGroups extends Migration $table->unique(['user_id', 'user_group_id', 'user_role_id']); } ); + Schema::table( + 'users', function (Blueprint $table) { + if (!Schema::hasColumn('users', 'user_group_id')) { + $table->bigInteger('user_group_id', false, true)->nullable(); + $table->foreign('user_group_id', 'type_user_group_id')->references('id')->on('user_groups')->onDelete('set null'); + } + } + ); } } diff --git a/database/seeders/UserRoleSeeder.php b/database/seeders/UserRoleSeeder.php index 48d7e73cdf..a3bb818cfc 100644 --- a/database/seeders/UserRoleSeeder.php +++ b/database/seeders/UserRoleSeeder.php @@ -26,6 +26,7 @@ class UserRoleSeeder extends Seeder UserRole::CHANGE_REPETITIONS, UserRole::VIEW_REPORTS, UserRole::FULL, + UserRole::OWNER, ]; /** @var string $role */