This commit is contained in:
Nell committed 2026-07-13 16:16:00 +02:00
1 parent 843dad8d79
commit dc2be94a8d
10 files changed
+102 -38

No files matched your search

+20 -6
View File
@@ -1,6 +1,6 @@
use crate::models::{
channel, channel_role_permission, channel_user_permission, computed_permission, role_user,
server_role_permission, server_user,
server_role_permission, server_user, server_user_permission,
};
use crate::permissions::{ChannelPermission, ServerPermission};
use crate::repositories::{AnyResult, RepositoryContext};
@@ -46,6 +46,7 @@ impl ComputedPermissionRepository {
/// Les permissions effectives sont composées de :
///
/// - permissions serveur accordées aux rôles de l'utilisateur ;
/// - permissions serveur accordées directement à l'utilisateur ;
/// - permissions de canal accordées aux rôles de l'utilisateur ;
/// - permissions directes de l'utilisateur dans les canaux.
pub async fn full_sync_user(&self, user_id: Uuid, server_id: Uuid) -> AnyResult<()> {
@@ -76,10 +77,23 @@ impl ComputedPermissionRepository {
for permission in role_permissions {
server_permissions |=
ServerPermission::from_bits_retain(permission.permission as u64);
ServerPermission::from_bits_retain(permission.permissions as u64);
}
}
// ---------------------------------------------------------------------
// Permissions serveur directes de l'utilisateur
// ---------------------------------------------------------------------
if let Some(permission) = server_user_permission::Entity::find()
.filter(server_user_permission::Column::ServerId.eq(server_id))
.filter(server_user_permission::Column::UserId.eq(user_id))
.one(&self.context.db)
.await?
{
server_permissions |= ServerPermission::from_bits_retain(permission.permissions as u64);
}
// ---------------------------------------------------------------------
// Canaux du serveur
// ---------------------------------------------------------------------
@@ -112,7 +126,7 @@ impl ComputedPermissionRepository {
.entry(permission.channel_id)
.or_default()
.insert(ChannelPermission::from_bits_retain(
permission.permission as u64,
permission.permissions as u64,
));
}
@@ -135,7 +149,7 @@ impl ComputedPermissionRepository {
.entry(permission.channel_id)
.or_default()
.insert(ChannelPermission::from_bits_retain(
permission.permission as u64,
permission.permissions as u64,
));
}
@@ -151,7 +165,7 @@ impl ComputedPermissionRepository {
server_id: Set(server_id),
scope_type: Set(PermissionScopeType::Server),
resource_id: Set(server_id),
server_permissions: Set(server_permissions.bits() as i64),
permissions: Set(server_permissions.bits() as i64),
..Default::default()
});
@@ -166,7 +180,7 @@ impl ComputedPermissionRepository {
server_id: Set(server_id),
scope_type: Set(PermissionScopeType::Channel),
resource_id: Set(channel.id),
channel_permissions: Set(channel_permissions.bits() as i64),
permissions: Set(channel_permissions.bits() as i64),
..Default::default()
});
}