sea_orm/rbac/engine/
loader.rs1use super::super::entity::{
2 permission::Entity as Permission, resource::Entity as Resource, role::Entity as Role,
3 role_hierarchy::Entity as RoleHierarchy, role_permission::Entity as RolePermission,
4 user_override::Entity as UserOverride, user_role::Entity as UserRole,
5};
6use super::{RbacEngine, RbacSnapshot};
7use crate::{AccessMode, DbConn, DbErr, EntityTrait, IsolationLevel, TransactionTrait};
8
9impl RbacEngine {
10 pub async fn load_from(db: &DbConn) -> Result<Self, DbErr> {
11 let txn = &db
13 .begin_with_config(
14 Some(IsolationLevel::ReadCommitted),
15 Some(AccessMode::ReadOnly),
16 )
17 .await?;
18
19 let resources = Resource::find().all(txn).await?;
20 let permissions = Permission::find().all(txn).await?;
21 let roles = Role::find().all(txn).await?;
22 let user_roles = UserRole::find().all(txn).await?;
23 let role_permissions = RolePermission::find().all(txn).await?;
24 let user_overrides = UserOverride::find().all(txn).await?;
25 let role_hierarchy = RoleHierarchy::find().all(txn).await?;
26
27 let snapshot = RbacSnapshot {
28 resources,
29 permissions,
30 roles,
31 user_roles,
32 role_permissions,
33 user_overrides,
34 role_hierarchy,
35 };
36
37 Ok(Self::from_snapshot(snapshot))
38 }
39}