Skip to content

Commit 73dc14f

Browse files
committed
Replace authentication using model with element instead
1 parent 4fd6775 commit 73dc14f

28 files changed

+237
-63
lines changed

routes/actions.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@
7171
Route::prefix(Cms::config()->actionTrigger)->group(function () {
7272
Route::post('migrate', MigrateController::class);
7373

74-
Route::middleware(['auth'])->group(function () {
74+
Route::middleware(['auth:craft'])->group(function () {
7575
Route::post('entries/save-entry', StoreEntryController::class);
7676
});
7777

@@ -115,7 +115,7 @@
115115
/**
116116
* Actions needing auth
117117
*/
118-
Route::middleware(['auth'])->group(function () {
118+
Route::middleware(['auth:craft'])->group(function () {
119119
// Addresses
120120
Route::post('addresses/fields', [AddressesController::class, 'fields']);
121121
Route::middleware(RequireAdminChanges::class)->post('addresses/save-field-layout', [AddressesController::class, 'saveFieldLayout']);

routes/cp.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@
3636
/**
3737
* Admin requests that require a login
3838
*/
39-
Route::middleware('auth')->group(function () {
39+
Route::middleware('auth:craft')->group(function () {
4040
Route::get('dashboard', DashboardController::class);
4141

4242
Route::get('utilities', [UtilitiesController::class, 'index']);

src/Dashboard/Dashboard.php

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -296,7 +296,7 @@ public function changeWidgetColspan(int $widgetId, int $colspan): bool
296296
*/
297297
private function addDefaultUserWidgets(): void
298298
{
299-
/** @var User $user */
299+
/** @var ?\craft\elements\User $user */
300300
$user = Auth::user();
301301

302302
// Recent Entries widget
@@ -321,9 +321,11 @@ private function addDefaultUserWidgets(): void
321321
],
322322
]));
323323

324-
$user->update([
324+
User::where('id', $user->id)->update([
325325
'hasDashboard' => true,
326326
]);
327+
328+
$user->hasDashboard = true;
327329
}
328330

329331
private function getUserWidgetModelById(?int $widgetId = null): Models\Widget

src/Database/Migrations/0000_00_00_000001_add_remember_token_to_users.php

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,17 +11,17 @@
1111
{
1212
public function up(): void
1313
{
14-
if (Schema::hasColumn(Table::USERS, 'remember_token')) {
14+
if (Schema::hasColumn(Table::USERS, 'rememberToken')) {
1515
return;
1616
}
1717

1818
Schema::table(Table::USERS, function (Blueprint $table) {
19-
$table->rememberToken();
19+
$table->string('rememberToken', 100)->nullable();
2020
});
2121
}
2222

2323
public function down(): void
2424
{
25-
Schema::dropColumns(Table::USERS, 'remember_token');
25+
Schema::dropColumns(Table::USERS, 'rememberToken');
2626
}
2727
};

src/Database/Migrations/Install.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -774,7 +774,7 @@ public function createTables(): void
774774
$table->string('unverifiedEmail')->nullable();
775775
$table->boolean('passwordResetRequired')->default(false);
776776
$table->dateTime('lastPasswordChangeDate')->nullable();
777-
$table->rememberToken();
777+
$table->string('rememberToken', 100)->nullable();
778778
$table->dateTime('dateCreated');
779779
$table->dateTime('dateUpdated');
780780

src/Database/Queries/UserQuery.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,7 @@ public function __construct(array $config = [])
5959
'users.affiliatedSiteId as affiliatedSiteId',
6060
'users.active as active',
6161
'users.fullName as fullName',
62+
'users.rememberToken as rememberToken',
6263
]);
6364
}
6465

src/Edition.php

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
use CraftCms\Cms\Edition\Events\EditionChanged;
88
use CraftCms\Cms\Edition\Exceptions\WrongEditionException;
99
use CraftCms\Cms\License\License;
10+
use CraftCms\Cms\Shared\Models\Info;
1011
use CraftCms\Cms\Support\Env;
1112
use CraftCms\Cms\Support\Facades\ProjectConfig;
1213
use Illuminate\Support\Facades\Auth;
@@ -125,7 +126,7 @@ public static function canTest(): bool
125126

126127
public static function canUpgrade(): bool
127128
{
128-
if (! Auth::getUser()?->isAdmin()) {
129+
if (! Auth::user()?->isAdmin()) {
129130
return false;
130131
}
131132

@@ -146,7 +147,7 @@ public static function require(Edition|int $edition, bool $orBetter = true): voi
146147
$edition = self::from($edition);
147148
}
148149

149-
if (! \Craft::$app->getIsInstalled()) {
150+
if (! Info::isInstalled()) {
150151
return;
151152
}
152153

src/Element/ElementSources.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -330,7 +330,7 @@ private function showCustomSource(array $source): bool
330330
}
331331

332332
return array_any(
333-
$user->getGroups()->all(),
333+
$user->getGroups(),
334334
fn ($group) => in_array($group->uid, $source['userGroups'], true)
335335
);
336336
}

src/Http/Controllers/Users/EditUserTrait.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ protected function asEditUserScreen(User $user, string $screen): CpScreenRespons
7777

7878
$screens[self::SCREEN_ADDRESSES] = ['label' => t('Addresses')];
7979

80-
$currentUser = Auth::user()->asElement();
80+
$currentUser = Auth::user();
8181

8282
if (Event::hasListeners(DefineEditUserScreens::class)) {
8383
Event::dispatch($event = new DefineEditUserScreens($currentUser, $user, $screens));
@@ -162,7 +162,7 @@ function (CpScreenResponse $response) use ($user, $pageName) {
162162

163163
private function showPermissionsScreen(): bool
164164
{
165-
$currentUser = Auth::user()->asElement();
165+
$currentUser = Auth::user();
166166

167167
return
168168
Edition::get()->value >= Edition::Team->value &&

src/Http/Controllers/Users/ImpersonationController.php

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@
1010
use CraftCms\Cms\Http\RespondsWithFlash;
1111
use CraftCms\Cms\Support\Flash;
1212
use CraftCms\Cms\User\Actions\GetImpersonationUrlAction;
13-
use CraftCms\Cms\User\Models\User as UserModel;
1413
use Illuminate\Http\JsonResponse;
1514
use Illuminate\Http\Request;
1615
use Illuminate\Support\Facades\Auth;
@@ -48,7 +47,7 @@ public function impersonate(): Response
4847
Craft::$app->getUser()->setImpersonatorId($this->request->user()->id);
4948

5049
try {
51-
Auth::login(UserModel::findOrFail($userId));
50+
Auth::login($user);
5251
} catch (Throwable) {
5352
Flash::fail(t('There was a problem impersonating this user.'));
5453

@@ -76,7 +75,7 @@ public function getUrl(GetImpersonationUrlAction $getImpersonationUrlAction): Js
7675

7776
$this->enforceImpersonatePermission($user);
7877

79-
$url = $getImpersonationUrlAction(UserModel::findOrFail($user->id));
78+
$url = $getImpersonationUrlAction($user);
8079

8180
abort_if($url === false, 500, 'Unable to generate impersonation URL.');
8281

@@ -93,19 +92,20 @@ public function withToken(): Response
9392
$userId = $this->request->integer('userId');
9493
$prevUserId = $this->request->integer('prevUserId');
9594

96-
$user = UserModel::findOrFail($userId);
95+
/** @var User $user */
96+
$user = Craft::$app->getUsers()->getUserById($userId);
9797

9898
Craft::$app->getUser()->setImpersonatorId($prevUserId);
9999

100100
try {
101-
Auth::login(UserModel::findOrFail($userId));
101+
Auth::login($user);
102102
} catch (Throwable) {
103103
Flash::fail(t('There was a problem impersonating this user.'));
104104

105105
return back();
106106
}
107107

108-
return $this->handleSuccessfulLogin(Craft::$app->getUsers()->getUserById($user->id));
108+
return $this->handleSuccessfulLogin($user);
109109
}
110110

111111
private function handleSuccessfulLogin(User $user): Response
@@ -132,10 +132,11 @@ private function handleSuccessfulLogin(User $user): Response
132132

133133
private function enforceImpersonatePermission(User $user): void
134134
{
135-
$yiiCurrentUser = Craft::$app->getUsers()->getUserById($this->request->user()->id);
135+
/** @var ?\craft\elements\User $currentUser */
136+
$currentUser = $this->request->user();
136137

137138
abort_unless(
138-
Craft::$app->getUsers()->canImpersonate($yiiCurrentUser, $user),
139+
Craft::$app->getUsers()->canImpersonate($currentUser, $user),
139140
403,
140141
t('You do not have sufficient permissions to impersonate this user'),
141142
);

0 commit comments

Comments
 (0)