پرش به مطلب اصلی

Session و Role و لاگ ها

این صفحه روی بخش های runtime احراز هویت تمرکز دارد: کاربر فعلی، نقش فعال، localization سشن، و لاگ های امنیتی.

اگر از flow آماده package استفاده کنید، بخش زیادی از این رفتارها خودکار اجرا می‌شوند. اگر login یا OTP یا role selection را خودتان می‌نویسید، این صفحه APIهای لازم برای تکمیل همان flow را نشان می‌دهد.

کار با کاربر احراز هویت شده

متدهای کلیدی

object Authenticator::user(?object $user = null)
int|null Authenticator::id()
bool Authenticator::canLogin(object $user)
bool Authenticator::isCurrentUserStatusActive()
object|null Authenticator::findUserByCredential(string $authFieldValue, ?int $personType = null)
bool Authenticator::validatePassword(string $password)

Authenticator::user(?object $user = null): object

اگر پارامتر ندهید، کاربر جاری را برمی‌گرداند. اگر مدل کاربر بدهید، همان کاربر را به عنوان user فعال instance تنظیم می‌کند.

پارامترنوعتوضیح
userobject | nullمدل کاربر برای تنظیم context جاری

Authenticator::findUserByCredential(string $authFieldValue, ?int $personType = null): ?object

کاربر را بر اساس auth field فعالی که قبلاً با useAuthField() تنظیم شده پیدا می‌کند.

پارامترنوعتوضیح
authFieldValuestringمقدار خام ورودی کاربر
personTypeint | nullدر پروژه های حقیقی/حقوقی برای محدود کردن جستجو

Authenticator::canLogin(object $user): bool

بررسی می‌کند آیا وضعیت کاربر اجازه ورود می‌دهد یا نه.

پارامترنوعتوضیح
userobjectمدل کاربر

Authenticator::validatePassword(string $password): bool

password ورودی را با رمز هش‌شده کاربر جاری مقایسه می‌کند.

پارامترنوعتوضیح
passwordstringرمز خامی که کاربر وارد کرده است

مثال: custom password login

use Dornica\AccessHub\Authentication\Facades\Authenticator;

$user = Authenticator::findUserByCredential(request('login'), request('person_type'));

if (! $user || ! Authenticator::canLogin($user)) {
abort(403, 'کاربر امکان ورود ندارد.');
}

if (! Authenticator::user($user)->validatePassword(request('password'))) {
abort(422, 'رمز عبور معتبر نیست.');
}

نقش فعال کاربر

بعد از login، ممکن است کاربر چند role داشته باشد. Authenticator می‌تواند role فعال را انتخاب یا تغییر دهد و permissionهای موثر را بر اساس همان role برگرداند.

متدهای کلیدی

Collection Authenticator::defaultRole()
Collection Authenticator::currentRole()
Collection Authenticator::role(?object $role = null)
void Authenticator::chooseRole(int $roleId)
void Authenticator::changeRole(int $roleId)
Collection Authenticator::roles()
Collection Authenticator::userRoles()
mixed Authenticator::currentUserRole()
Collection Authenticator::permissions()

مثال

use Dornica\AccessHub\Authentication\Facades\Authenticator;

$roles = Authenticator::userRoles();

Authenticator::chooseRole($request->integer('role_id'));

$permissions = Authenticator::permissions();

زبان و پرتال

اگر سیستم شما چندزبانه یا چندپرتاله است، Authenticator بخش localization مرتبط با session کاربر را هم مدیریت می‌کند.

متدهای مهم

bool Authenticator::hasPortalChanged(int $newPortalId)
bool Authenticator::hasLanguageChanged(int $newLanguageId)
void Authenticator::changePortal(int $newPortalId)
void Authenticator::changeLanguage(int $newLanguageId)
void Authenticator::choosePortal(int $newPortalId)
void Authenticator::chooseLanguage(int $newLanguageId, ?int $portalId = null)
bool Authenticator::shouldPromptLocalization()
Collection Authenticator::portals()
Collection Authenticator::activePortals()
Collection Authenticator::portal(object|int|null $portal = null)
Collection Authenticator::language(object|int|null $language = null)
Collection Authenticator::portalLanguages(object|int|null $portal = null)
array Authenticator::buildLocalizationSelectionData()

لاگ های امنیتی ورود

ثبت login موفق، logout و login ناموفق برای audit و تحلیل امنیتی مهم است. این بخش برای custom flowها مهم است، چون اگر از UI آماده package عبور کنید، خودتان باید این logها را در نقاط درست ثبت کنید.

متدهای کلیدی

Carbon|null Authenticator::latestLoginTime()
Collection Authenticator::recentLogins(int $limit = 1)
mixed Authenticator::recordLogin(mixed $request, ?UserLoginLogsType $type = null, ?UserLoginType $loginType = null)
bool Authenticator::updateLoginRecord()
void Authenticator::recordFailedLogin(mixed $request, UserLoginType $loginType)
bool Authenticator::recordLogout()
void Authenticator::logout()

Authenticator::recordLogin(mixed $request, ?UserLoginLogsType $type = null, ?UserLoginType $loginType = null)

ورود موفق را در لاگ امنیتی ثبت می‌کند.

پارامترنوعتوضیح
requestmixedrequest جاری
typeUserLoginLogsType | nullنوع رکورد لاگ
loginTypeUserLoginType | nullروش ورود مثل password یا otp

Authenticator::recordFailedLogin(mixed $request, UserLoginType $loginType): void

تلاش ناموفق ورود را ثبت می‌کند.

پارامترنوعتوضیح
requestmixedrequest جاری
loginTypeUserLoginTypeروش ورود ناموفق

مثال

use Dornica\AccessHub\Authentication\Enums\UserLoginType;
use Dornica\AccessHub\Authentication\Facades\Authenticator;

Authenticator::recordFailedLogin(request(), UserLoginType::PASSWORD);

نکته طراحی

loginMethods() هنوز بخشی از flow واقعی احراز هویت است و در controllerهای AuthUI استفاده می‌شود، بنابراین آن را یک helper تزئینی در نظر نگیرید. اگر قصد refactor این بخش را دارید، اول مصرف آن در controllerها و flow ورود را بررسی کنید.