init
This commit is contained in:
+96
-28
@@ -2,47 +2,105 @@ use bitflags::bitflags;
|
||||
use serde::{Deserialize, Serialize};
|
||||
|
||||
bitflags! {
|
||||
/// Permissions liées aux serveurs (gestion globale)
|
||||
/// Permissions applicables au serveur.
|
||||
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Default, Serialize, Deserialize)]
|
||||
#[serde(transparent)]
|
||||
pub struct ServerPermission: u64 {
|
||||
const ManageServer = 1 << 0;
|
||||
const ManageRoles = 1 << 1;
|
||||
const KickMember = 1 << 2;
|
||||
const BanMember = 1 << 3;
|
||||
// ... jusqu'à 64 perms serveur
|
||||
/// Modifier les paramètres généraux du serveur.
|
||||
const MANAGE_SERVER = 1 << 0;
|
||||
|
||||
/// Créer, modifier et supprimer des rôles.
|
||||
const MANAGE_ROLES = 1 << 1;
|
||||
|
||||
/// Créer, modifier et supprimer des catégories.
|
||||
const MANAGE_CATEGORIES = 1 << 2;
|
||||
|
||||
/// Créer, modifier et supprimer des canaux.
|
||||
const MANAGE_CHANNELS = 1 << 3;
|
||||
|
||||
/// Expulser un membre du serveur.
|
||||
const KICK_MEMBERS = 1 << 4;
|
||||
|
||||
/// Bannir un membre du serveur.
|
||||
const BAN_MEMBERS = 1 << 5;
|
||||
|
||||
/// Modifier le profil ou les rôles d'un membre.
|
||||
const MANAGE_MEMBERS = 1 << 6;
|
||||
|
||||
/// Voir la liste des membres du serveur.
|
||||
const VIEW_MEMBERS = 1 << 7;
|
||||
}
|
||||
}
|
||||
|
||||
bitflags! {
|
||||
/// Permissions liées aux canaux (texte + vocal)
|
||||
/// Permissions applicables aux canaux texte et aux ressources qui leur sont liées.
|
||||
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Default, Serialize, Deserialize)]
|
||||
#[serde(transparent)]
|
||||
pub struct ChannelPermission: u64 {
|
||||
const ReadChannel = 1 << 0;
|
||||
const SendMessage = 1 << 1;
|
||||
const DeleteMessage = 1 << 2;
|
||||
const DeleteOthersMessage = 1 << 3;
|
||||
const ManageChannel = 1 << 4;
|
||||
// ...
|
||||
/// Voir le canal et son contenu.
|
||||
const READ_CHANNEL = 1 << 0;
|
||||
|
||||
/// Envoyer un nouveau message.
|
||||
const SEND_MESSAGE = 1 << 1;
|
||||
|
||||
/// Modifier ses propres messages.
|
||||
const EDIT_OWN_MESSAGE = 1 << 2;
|
||||
|
||||
/// Supprimer ses propres messages.
|
||||
const DELETE_OWN_MESSAGE = 1 << 3;
|
||||
|
||||
/// Modifier les messages des autres utilisateurs.
|
||||
const EDIT_OTHERS_MESSAGES = 1 << 4;
|
||||
|
||||
/// Supprimer les messages des autres utilisateurs.
|
||||
const DELETE_OTHERS_MESSAGES = 1 << 5;
|
||||
|
||||
/// Ajouter des réactions aux messages.
|
||||
const ADD_REACTIONS = 1 << 6;
|
||||
|
||||
/// Utiliser des aperçus de liens ou des pièces jointes.
|
||||
const ATTACH_FILES = 1 << 7;
|
||||
|
||||
/// Modifier les paramètres du canal.
|
||||
const MANAGE_CHANNEL = 1 << 8;
|
||||
|
||||
/// Épingler ou désépingler des messages.
|
||||
const MANAGE_MESSAGES = 1 << 10;
|
||||
}
|
||||
}
|
||||
|
||||
bitflags! {
|
||||
/// Permissions liées au vocal
|
||||
/// Permissions applicables aux canaux vocaux.
|
||||
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Default, Serialize, Deserialize)]
|
||||
#[serde(transparent)]
|
||||
pub struct VoicePermission: u64 {
|
||||
const JoinChannel = 1 << 0;
|
||||
const VoiceSpeak = 1 << 1;
|
||||
const VoiceMuteOthers = 1 << 2;
|
||||
const VoiceDeafenOthers = 1 << 3;
|
||||
// ...
|
||||
/// Rejoindre un canal vocal.
|
||||
const JOIN_CHANNEL = 1 << 0;
|
||||
|
||||
/// Parler dans un canal vocal.
|
||||
const SPEAK = 1 << 1;
|
||||
|
||||
/// Utiliser sa caméra ou partager son écran.
|
||||
const STREAM = 1 << 2;
|
||||
|
||||
/// Couper son propre microphone.
|
||||
const MUTE_SELF = 1 << 3;
|
||||
|
||||
/// Couper le microphone d'un autre membre.
|
||||
const MUTE_OTHERS = 1 << 4;
|
||||
|
||||
/// Déplacer un membre vers un autre canal vocal.
|
||||
const MOVE_OTHERS = 1 << 6;
|
||||
|
||||
/// Expulser un membre d'un canal vocal.
|
||||
const DISCONNECT_OTHERS = 1 << 7;
|
||||
|
||||
/// Modifier les paramètres du canal vocal.
|
||||
const MANAGE_VOICE_CHANNEL = 1 << 8;
|
||||
}
|
||||
}
|
||||
|
||||
/// Agrégat de permissions traversant tous les domaines.
|
||||
/// Utile pour les API et les contrôles complets.
|
||||
/// Ensemble des permissions calculées pour un utilisateur.
|
||||
#[derive(Debug, Clone, Copy, PartialEq, Eq, Default, Serialize, Deserialize)]
|
||||
pub struct PermissionSet {
|
||||
pub server: ServerPermission,
|
||||
@@ -63,15 +121,25 @@ impl PermissionSet {
|
||||
}
|
||||
}
|
||||
|
||||
/// Permissions par défaut accordées à un membre standard.
|
||||
pub const DEFAULT: Self = Self::new(
|
||||
ServerPermission::empty(),
|
||||
ChannelPermission::from_bits_truncate(
|
||||
ChannelPermission::ReadChannel.bits()
|
||||
| ChannelPermission::SendMessage.bits()
|
||||
| ChannelPermission::DeleteMessage.bits(),
|
||||
ServerPermission::VIEW_MEMBERS,
|
||||
ChannelPermission::from_bits_retain(
|
||||
ChannelPermission::READ_CHANNEL.bits()
|
||||
| ChannelPermission::SEND_MESSAGE.bits()
|
||||
| ChannelPermission::EDIT_OWN_MESSAGE.bits()
|
||||
| ChannelPermission::DELETE_OWN_MESSAGE.bits()
|
||||
| ChannelPermission::ADD_REACTIONS.bits(),
|
||||
),
|
||||
VoicePermission::from_bits_truncate(
|
||||
VoicePermission::JoinChannel.bits() | VoicePermission::VoiceSpeak.bits(),
|
||||
VoicePermission::from_bits_retain(
|
||||
VoicePermission::JOIN_CHANNEL.bits() | VoicePermission::SPEAK.bits(),
|
||||
),
|
||||
);
|
||||
|
||||
/// Vérifie si l'ensemble contient la permission demandée.
|
||||
pub const fn contains(&self, required: Self) -> bool {
|
||||
self.server.contains(required.server)
|
||||
&& self.channel.contains(required.channel)
|
||||
&& self.voice.contains(required.voice)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user