Skip to main content

rustio_admin/auth/
mod.rs

1//! Authentication & authorization.
2//!
3//! Three pieces:
4//! - `users.rs`       — user records, password hashing, login
5//! - `sessions.rs`    — DB-backed sessions with expiry cleanup
6//! - `permissions.rs` — granular permissions + groups
7//!
8//! A user belongs to zero or more groups. Permissions come from two
9//! sources: (a) direct assignments on the user, (b) inherited from
10//! the user's groups. The permission string is
11//! `<app>.<action>_<model>` — e.g. `posts.change_post`.
12
13pub mod guards;
14mod permissions;
15mod role;
16mod sessions;
17mod users;
18
19pub(crate) use permissions::invalidate_user_cache;
20pub use permissions::{
21    add_user_to_group, check_permission, create_group, grant_to_group, grant_to_user,
22    init_permission_tables, permissions_for_user, register_model_permissions,
23    remove_user_from_group, Permission, PermissionError, Superuser,
24};
25pub use role::{protected_roles, Role};
26pub use sessions::{
27    create_session, delete_session, identity_from_session, init_session_tables,
28    purge_expired_sessions, session_token_from_cookie, SESSION_COOKIE,
29};
30#[allow(deprecated)]
31pub use users::would_orphan_developers;
32pub use users::{
33    create_user, find_user_by_email, hash_password, init_user_tables, load_user_profile, login,
34    migrate_user_schema, set_password, update_user_role, verdict_for_orphan_role, verify_password,
35    would_orphan_protected, would_orphan_role, Identity, StoredUser, UserProfile,
36};
37
38use crate::error::Result;
39use crate::orm::Db;
40
41/// Initialise every auth-related table. Safe to call on every boot.
42pub async fn init_tables(db: &Db) -> Result<()> {
43    init_user_tables(db).await?;
44    migrate_user_schema(db).await?;
45    init_session_tables(db).await?;
46    sessions::migrate_session_schema(db).await?;
47    init_permission_tables(db).await?;
48    Ok(())
49}