Two-factor authentication
Every account can enable authenticator-app two-factor authentication with recovery codes. Enabling it requires confirming the code, and changing it requires the account password. Accounts that sign in through the iUtils hub carry the hub's two-factor state with them.
Evidence:
config/fortify.php, app/Support/SocialHubAuthBridge.php
Agency-enforced two-factor
An agency owner or admin can require two-factor of every member from Settings → Team. Members get a grace period (seven days by default) to set it up; after that they are held at Security settings until they do, and the hold is audited. A member who signs in through the iUtils hub satisfies the requirement with the hub's two-factor.
Evidence:
app/Http/Middleware/RequireAgencyMfa.php, app/Support/Agency/AgencyMfaPolicy.php, app/Livewire/Pages/Settings/Team.php, config/saas.php
Step-up authentication
Security settings and two-factor changes require a fresh password confirmation, or for hub accounts a fresh sign-in on the hub. Confirmation attempts are limited to five per minute.
Evidence:
app/Http/Middleware/RequirePasswordConfirmation.php, routes/settings.php, app/Providers/FortifyServiceProvider.php
Password policy
In production, passwords must be at least 12 characters with mixed case, a number and a symbol, and are checked against known breach corpora before they are accepted.
Evidence:
app/Providers/AppServiceProvider.php
Sign-in throttling
Sign-in, two-factor and password-confirmation attempts are limited to five per minute per account.
Evidence:
app/Providers/FortifyServiceProvider.php
Sessions
Sessions are stored server-side in the database, expire after 120 minutes of inactivity, and use HTTP-only, SameSite cookies. A sign-out on the iUtils hub ends every session here through a signed back-channel request.
Evidence:
config/session.php, app/Support/SocialHubAuthBridge.php
Roles and permissions
Agency roles (owner, admin, member), an optional content role (creator, reviewer, publisher) and per-brand roles with a permission map decide what each person can see and do. Owners and admins manage the roster, roles and invitations from Settings → Team; the last owner cannot be removed or demoted. The five brand-role presets and their permissions are published in the help centre.
Evidence:
app/Enums/AgencyRole.php, app/Enums/AgencyContentRole.php, app/Policies/AgencyPolicy.php, app/Livewire/Pages/Settings/Team.php, app/Support/BrandAccess/DefaultBrandRoles.php, app/Support/BrandAccess/BrandAccess.php