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 fn load_from(db: &DbConn) -> Result<Self, DbErr> {
11 let txn = &db.begin_with_config(
13 Some(IsolationLevel::ReadCommitted),
14 Some(AccessMode::ReadOnly),
15 )?;
16
17 let resources = Resource::find().all(txn)?;
18 let permissions = Permission::find().all(txn)?;
19 let roles = Role::find().all(txn)?;
20 let user_roles = UserRole::find().all(txn)?;
21 let role_permissions = RolePermission::find().all(txn)?;
22 let user_overrides = UserOverride::find().all(txn)?;
23 let role_hierarchy = RoleHierarchy::find().all(txn)?;
24
25 let snapshot = RbacSnapshot {
26 resources,
27 permissions,
28 roles,
29 user_roles,
30 role_permissions,
31 user_overrides,
32 role_hierarchy,
33 };
34
35 Ok(Self::from_snapshot(snapshot))
36 }
37}