Authentication

User Model

Built-in Model

Runique includes a ready-to-use user model that requires no configuration.

Generated table: eihwaz_users

FieldTypeDescription
idi32Primary key
usernameStringUnique username
emailStringEmail address
passwordStringArgon2 hash — never stored in plain text
is_activeboolAccount active
is_staffboolAdmin panel access (limited)
is_superuserboolFull access, bypasses all rules
rolesJSONCustom roles e.g. ["editor"]
created_atdatetimeCreation timestamp
updated_atdatetimeLast update timestamp

To create the first superuser:

runique create-superuser

To access the model from your code:

use runique::prelude::user::{Model, ActiveModel};

RuniqueUser Trait

If you use your own user model instead of the built-in one, you must implement RuniqueUser.

use runique::middleware::auth::RuniqueUser;

impl RuniqueUser for users::Model {
    fn user_id(&self) -> i32        { self.id }
    fn username(&self) -> &str      { &self.username }
    fn email(&self) -> &str         { &self.email }
    fn password_hash(&self) -> &str { &self.password }
    fn is_active(&self) -> bool     { self.is_active }
    fn is_staff(&self) -> bool      { self.is_staff }
    fn is_superuser(&self) -> bool  { self.is_superuser }

    // Optional — custom roles
    fn roles(&self) -> Vec<String> {
        self.roles.clone().unwrap_or_default()
    }

    // Optional — custom admin access logic
    fn can_access_admin(&self) -> bool {
        self.is_active() && (self.is_staff() || self.is_superuser())
    }
}

Required Methods

MethodReturnDescription
user_id()i32Unique identifier
username()&strUsername
email()&strEmail address
password_hash()&strPassword hash
is_active()boolAccount is active
is_staff()boolLimited admin access
is_superuser()boolFull admin access

Methods With Default Implementation

MethodDefaultDescription
roles()vec![]Custom roles
can_access_admin()is_active && (is_staff || is_superuser)Admin access logic