mirror of
https://github.com/firefly-iii/firefly-iii.git
synced 2025-10-14 16:13:54 +00:00
Code that add extra check for #1039
This commit is contained in:
@@ -29,7 +29,10 @@ use FireflyIII\Mail\ConfirmEmailChangeMail;
|
|||||||
use FireflyIII\Mail\RegisteredUser as RegisteredUserMail;
|
use FireflyIII\Mail\RegisteredUser as RegisteredUserMail;
|
||||||
use FireflyIII\Mail\RequestedNewPassword as RequestedNewPasswordMail;
|
use FireflyIII\Mail\RequestedNewPassword as RequestedNewPasswordMail;
|
||||||
use FireflyIII\Mail\UndoEmailChangeMail;
|
use FireflyIII\Mail\UndoEmailChangeMail;
|
||||||
|
use FireflyIII\Models\Role;
|
||||||
use FireflyIII\Repositories\User\UserRepositoryInterface;
|
use FireflyIII\Repositories\User\UserRepositoryInterface;
|
||||||
|
use FireflyIII\User;
|
||||||
|
use Illuminate\Auth\Events\Login;
|
||||||
use Log;
|
use Log;
|
||||||
use Mail;
|
use Mail;
|
||||||
use Preferences;
|
use Preferences;
|
||||||
@@ -64,6 +67,46 @@ class UserEventHandler
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param Login $event
|
||||||
|
*
|
||||||
|
* @return bool
|
||||||
|
*/
|
||||||
|
public function checkSingleUserIsAdmin(Login $event): bool
|
||||||
|
{
|
||||||
|
Log::debug('In checkSingleUserIsAdmin');
|
||||||
|
|
||||||
|
$user = $event->user;
|
||||||
|
$count = User::count();
|
||||||
|
|
||||||
|
if ($count > 1) {
|
||||||
|
// if more than one user, do nothing.
|
||||||
|
Log::debug(sprintf('System has %d users, will not change users roles.', $count));
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
// user is only user but has admin role
|
||||||
|
if ($count === 1 && $user->hasRole('owner')) {
|
||||||
|
Log::debug(sprintf('User #%d is only user but has role owner so all is well.', $user->id));
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
// user is the only user but does not have role "owner".
|
||||||
|
$role = Role::where('name', 'owner')->first();
|
||||||
|
if (is_null($role)) {
|
||||||
|
// create role, does not exist. Very strange situation so let's raise a big fuss about it.
|
||||||
|
$role = Role::create(['name' => 'owner', 'display_name' => 'Site Owner', 'description' => 'User runs this instance of FF3']);
|
||||||
|
Log::error('Could not find role "owner". This is weird.');
|
||||||
|
}
|
||||||
|
|
||||||
|
Log::info(sprintf('Gave user #%d role #%d ("%s")', $user->id, $role->id, $role->name));
|
||||||
|
// give user the role
|
||||||
|
$user->attachRole($role);
|
||||||
|
$user->save();
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param UserChangedEmail $event
|
* @param UserChangedEmail $event
|
||||||
*
|
*
|
||||||
|
@@ -41,6 +41,8 @@ class Role extends Model
|
|||||||
'updated_at' => 'datetime',
|
'updated_at' => 'datetime',
|
||||||
];
|
];
|
||||||
|
|
||||||
|
protected $fillable = ['name','display_name','description'];
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return \Illuminate\Database\Eloquent\Relations\BelongsToMany
|
* @return \Illuminate\Database\Eloquent\Relations\BelongsToMany
|
||||||
*/
|
*/
|
||||||
|
@@ -22,12 +22,14 @@ declare(strict_types=1);
|
|||||||
|
|
||||||
namespace FireflyIII\Providers;
|
namespace FireflyIII\Providers;
|
||||||
|
|
||||||
|
use FireflyIII\Events\RegisteredUser;
|
||||||
use FireflyIII\Models\Account;
|
use FireflyIII\Models\Account;
|
||||||
use FireflyIII\Models\PiggyBank;
|
use FireflyIII\Models\PiggyBank;
|
||||||
use FireflyIII\Models\PiggyBankRepetition;
|
use FireflyIII\Models\PiggyBankRepetition;
|
||||||
use FireflyIII\Models\Transaction;
|
use FireflyIII\Models\Transaction;
|
||||||
use FireflyIII\Models\TransactionJournal;
|
use FireflyIII\Models\TransactionJournal;
|
||||||
use FireflyIII\Models\TransactionJournalMeta;
|
use FireflyIII\Models\TransactionJournalMeta;
|
||||||
|
use Illuminate\Auth\Events\Login;
|
||||||
use Illuminate\Foundation\Support\Providers\EventServiceProvider as ServiceProvider;
|
use Illuminate\Foundation\Support\Providers\EventServiceProvider as ServiceProvider;
|
||||||
use Log;
|
use Log;
|
||||||
|
|
||||||
@@ -44,10 +46,15 @@ class EventServiceProvider extends ServiceProvider
|
|||||||
protected $listen
|
protected $listen
|
||||||
= [
|
= [
|
||||||
// is a User related event.
|
// is a User related event.
|
||||||
'FireflyIII\Events\RegisteredUser' => [
|
RegisteredUser::class => [
|
||||||
'FireflyIII\Handlers\Events\UserEventHandler@sendRegistrationMail',
|
'FireflyIII\Handlers\Events\UserEventHandler@sendRegistrationMail',
|
||||||
'FireflyIII\Handlers\Events\UserEventHandler@attachUserRole',
|
'FireflyIII\Handlers\Events\UserEventHandler@attachUserRole',
|
||||||
],
|
],
|
||||||
|
// is a User related event.
|
||||||
|
Login::class => [
|
||||||
|
'FireflyIII\Handlers\Events\UserEventHandler@checkSingleUserIsAdmin',
|
||||||
|
],
|
||||||
|
|
||||||
// is a User related event.
|
// is a User related event.
|
||||||
'FireflyIII\Events\RequestedNewPassword' => [
|
'FireflyIII\Events\RequestedNewPassword' => [
|
||||||
'FireflyIII\Handlers\Events\UserEventHandler@sendNewPassword',
|
'FireflyIII\Handlers\Events\UserEventHandler@sendNewPassword',
|
||||||
|
Reference in New Issue
Block a user