Document rights
This commit is contained in:
parent
83d4ffc4e8
commit
1e81a2682f
|
@ -1,56 +1,124 @@
|
||||||
use bitflags::bitflags;
|
use bitflags::bitflags;
|
||||||
|
|
||||||
bitflags! {
|
bitflags! {
|
||||||
|
/// Rights are instance-wide, per-user permissions for everything you may perform on the instance,
|
||||||
|
/// such as sending messages, editing messages, or shutting down the server.
|
||||||
|
/// They are separate from guild member permissions, which only apply to a given guild.
|
||||||
|
///
|
||||||
|
/// # Notes
|
||||||
|
/// The default rights on Discord.com are 648540060672 ([source](https://github.com/spacebarchat/server/issues/878#issuecomment-1234669715))
|
||||||
|
///
|
||||||
|
/// # Reference
|
||||||
|
/// See <https://docs.spacebar.chat/setup/server/security/rights/>
|
||||||
pub struct Rights: u64 {
|
pub struct Rights: u64 {
|
||||||
|
/// All rights
|
||||||
const OPERATOR = 1 << 0;
|
const OPERATOR = 1 << 0;
|
||||||
|
/// Ability to alter or remove others' applications
|
||||||
const MANAGE_APPLICATIONS = 1 << 1;
|
const MANAGE_APPLICATIONS = 1 << 1;
|
||||||
|
/// Same as the per-guild [MANAGE_GUILD] permission, but applies to all guilds and DM channels, can join any guild without invite
|
||||||
const MANAGE_GUILDS = 1 << 2;
|
const MANAGE_GUILDS = 1 << 2;
|
||||||
|
/// Can delete or edit any message they can read
|
||||||
const MANAGE_MESSAGES = 1 << 3;
|
const MANAGE_MESSAGES = 1 << 3;
|
||||||
|
/// Can add, change, define rate limits of other users,
|
||||||
|
/// can also grant others [BYPASS_RATE_LIMITS] when combined
|
||||||
|
/// with [BYPASS_RATE_LIMITS] and [MANAGE_USERS].
|
||||||
const MANAGE_RATE_LIMITS = 1 << 4;
|
const MANAGE_RATE_LIMITS = 1 << 4;
|
||||||
|
/// Can create, alter, enable and disable custom message routing rules in any channel/guild
|
||||||
const MANAGE_ROUTING = 1 << 5;
|
const MANAGE_ROUTING = 1 << 5;
|
||||||
|
/// Respond to or resolve other users' support tickets
|
||||||
const MANAGE_TICKETS = 1 << 6;
|
const MANAGE_TICKETS = 1 << 6;
|
||||||
|
/// Can create, alter, remove and ban users; can also create, modify and remove user groups
|
||||||
const MANAGE_USERS = 1 << 7;
|
const MANAGE_USERS = 1 << 7;
|
||||||
|
/// Can manually add members into their guilds and group DMs
|
||||||
const ADD_MEMBERS = 1 << 8;
|
const ADD_MEMBERS = 1 << 8;
|
||||||
|
/// Makes the user exempt from all rate limits
|
||||||
const BYPASS_RATE_LIMITS = 1 << 9;
|
const BYPASS_RATE_LIMITS = 1 << 9;
|
||||||
|
/// Can create, edit and remove own applications
|
||||||
const CREATE_APPLICATIONS = 1 << 10;
|
const CREATE_APPLICATIONS = 1 << 10;
|
||||||
|
/// Can create guild channels and custom channels
|
||||||
const CREATE_CHANNELS = 1 << 11;
|
const CREATE_CHANNELS = 1 << 11;
|
||||||
|
/// Can create 1:1 DMs
|
||||||
|
///
|
||||||
|
/// # Notes
|
||||||
|
/// A user without [SEND_MESSAGES] cannot be added to a DM
|
||||||
const CREATE_DMS = 1 << 12;
|
const CREATE_DMS = 1 << 12;
|
||||||
|
/// Can create group DMs
|
||||||
|
///
|
||||||
|
/// # Notes
|
||||||
|
/// A user without [SEND_MESSAGES] cannot be added to a DM
|
||||||
const CREATE_DM_GROUPS = 1 << 13;
|
const CREATE_DM_GROUPS = 1 << 13;
|
||||||
|
/// Can create guilds
|
||||||
const CREATE_GUILDS = 1 << 14;
|
const CREATE_GUILDS = 1 << 14;
|
||||||
|
/// Can create mass invites in guilds where they have [CREATE_INSTANT_INVITE]
|
||||||
const CREATE_INVITES = 1 << 15;
|
const CREATE_INVITES = 1 << 15;
|
||||||
|
/// Can create roles and per-guild or per-channel permission
|
||||||
|
/// overrides in the guilds that they have permissions
|
||||||
const CREATE_ROLES = 1 << 16;
|
const CREATE_ROLES = 1 << 16;
|
||||||
|
/// Can create templates for guilds, custom channels and channels with custom routing
|
||||||
const CREATE_TEMPLATES = 1 << 17;
|
const CREATE_TEMPLATES = 1 << 17;
|
||||||
|
/// Can create webhooks in the guilds that they have permissions
|
||||||
const CREATE_WEBHOOKS = 1 << 18;
|
const CREATE_WEBHOOKS = 1 << 18;
|
||||||
|
/// Can join guilds by using invites or vanity names
|
||||||
const JOIN_GUILDS = 1 << 19;
|
const JOIN_GUILDS = 1 << 19;
|
||||||
|
/// Can modify the pinned messages in the guilds that they have permission
|
||||||
const PIN_MESSAGES = 1 << 20;
|
const PIN_MESSAGES = 1 << 20;
|
||||||
|
/// Can react to messages, subject to permissions
|
||||||
const SELF_ADD_REACTIONS = 1 << 21;
|
const SELF_ADD_REACTIONS = 1 << 21;
|
||||||
|
/// Can delete own messages
|
||||||
const SELF_DELETE_MESSAGES = 1 << 22;
|
const SELF_DELETE_MESSAGES = 1 << 22;
|
||||||
|
/// Can edit own messages
|
||||||
const SELF_EDIT_MESSAGES = 1 << 23;
|
const SELF_EDIT_MESSAGES = 1 << 23;
|
||||||
|
/// Can edit own username, nickname and avatar
|
||||||
const SELF_EDIT_NAME = 1 << 24;
|
const SELF_EDIT_NAME = 1 << 24;
|
||||||
|
/// Can send messages in the channels that they have permissions
|
||||||
const SEND_MESSAGES = 1 << 25;
|
const SEND_MESSAGES = 1 << 25;
|
||||||
|
/// Can use voice activities, such as watch together or whiteboard
|
||||||
const USE_ACTIVITIES = 1 << 26;
|
const USE_ACTIVITIES = 1 << 26;
|
||||||
|
/// Can use video and screenshare in guilds/channels that they have permissions
|
||||||
const USE_VIDEO = 1 << 27;
|
const USE_VIDEO = 1 << 27;
|
||||||
|
/// Can use voice in guilds/channels that they have permissions
|
||||||
const USE_VOICE = 1 << 28;
|
const USE_VOICE = 1 << 28;
|
||||||
|
/// Can create user-specific invites in guilds that they have INVITE_USERS
|
||||||
const INVITE_USERS = 1 << 29;
|
const INVITE_USERS = 1 << 29;
|
||||||
|
/// Can delete/disable own account
|
||||||
const SELF_DELETE_DISABLE = 1 << 30;
|
const SELF_DELETE_DISABLE = 1 << 30;
|
||||||
|
/// Can use pay-to-use features once paid
|
||||||
const DEBTABLE = 1 << 31;
|
const DEBTABLE = 1 << 31;
|
||||||
|
/// Can earn money using monetization features in guilds that have MONETIZATION_ENABLED
|
||||||
const CREDITABLE = 1 << 32;
|
const CREDITABLE = 1 << 32;
|
||||||
|
/// Can kick or ban guild or group DM members in the guilds/groups where they have KICK_MEMBERS or BAN_MEMBERS
|
||||||
const KICK_BAN_MEMBERS = 1 << 33;
|
const KICK_BAN_MEMBERS = 1 << 33;
|
||||||
|
/// Can leave the guilds or group DMs that they joined on their own (one can always leave a guild or group DMs where they have been force-added)
|
||||||
const SELF_LEAVE_GROUPS = 1 << 34;
|
const SELF_LEAVE_GROUPS = 1 << 34;
|
||||||
|
/// Inverts the presence confidentiality default (OPERATOR's presence is not routed by default, others' are) for a given user
|
||||||
const PRESENCE = 1 << 35;
|
const PRESENCE = 1 << 35;
|
||||||
|
/// Can mark discoverable guilds where they have permissions to mark as discoverable
|
||||||
const SELF_ADD_DISCOVERABLE = 1 << 36;
|
const SELF_ADD_DISCOVERABLE = 1 << 36;
|
||||||
|
/// Can change anything in the primary guild directory
|
||||||
const MANAGE_GUILD_DIRECTORY = 1 << 37;
|
const MANAGE_GUILD_DIRECTORY = 1 << 37;
|
||||||
|
/// Can send confetti, screenshake and use the random user mention (@someone)
|
||||||
const POGGERS = 1 << 38;
|
const POGGERS = 1 << 38;
|
||||||
|
/// Can use achievements and cheers
|
||||||
const USE_ACHIEVEMENTS = 1 << 39;
|
const USE_ACHIEVEMENTS = 1 << 39;
|
||||||
|
/// Can initiate interactions
|
||||||
const INITIATE_INTERACTIONS = 1 << 40;
|
const INITIATE_INTERACTIONS = 1 << 40;
|
||||||
|
/// Can respond to interactions
|
||||||
const RESPOND_TO_INTERACTIONS = 1 << 41;
|
const RESPOND_TO_INTERACTIONS = 1 << 41;
|
||||||
|
/// Can send backdated events
|
||||||
const SEND_BACKDATED_EVENTS = 1 << 42;
|
const SEND_BACKDATED_EVENTS = 1 << 42;
|
||||||
|
/// Can accept mass (guild) invites
|
||||||
const USE_MASS_INVITES = 1 << 43;
|
const USE_MASS_INVITES = 1 << 43;
|
||||||
|
/// Can accept user-specific invites and DM requests
|
||||||
const ACCEPT_INVITES = 1 << 44;
|
const ACCEPT_INVITES = 1 << 44;
|
||||||
|
/// Can modify own flags
|
||||||
const SELF_EDIT_FLAGS = 1 << 45;
|
const SELF_EDIT_FLAGS = 1 << 45;
|
||||||
|
/// Can modify other's flags
|
||||||
const EDIT_FLAGS = 1 << 46;
|
const EDIT_FLAGS = 1 << 46;
|
||||||
|
/// Can manage other's groups
|
||||||
const MANAGE_GROUPS = 1 << 47;
|
const MANAGE_GROUPS = 1 << 47;
|
||||||
|
/// Can view server stats at /api/policies/stats
|
||||||
const VIEW_SERVER_STATS = 1 << 48;
|
const VIEW_SERVER_STATS = 1 << 48;
|
||||||
|
/// Can resend verification emails using /auth/verify/resend
|
||||||
const RESEND_VERIFICATION_EMAIL = 1 << 49;
|
const RESEND_VERIFICATION_EMAIL = 1 << 49;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -60,10 +128,16 @@ impl Rights {
|
||||||
(check_operator && self.contains(Rights::OPERATOR)) || self.contains(permission)
|
(check_operator && self.contains(Rights::OPERATOR)) || self.contains(permission)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Returns whether or not the Rights object has specific rights
|
||||||
pub fn has(&self, permission: Rights, check_operator: bool) -> bool {
|
pub fn has(&self, permission: Rights, check_operator: bool) -> bool {
|
||||||
(check_operator && self.contains(Rights::OPERATOR)) || self.contains(permission)
|
(check_operator && self.contains(Rights::OPERATOR)) || self.contains(permission)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Returns whether or not the Rights object has specific rights.
|
||||||
|
///
|
||||||
|
/// # Notes
|
||||||
|
/// Unlike has, this returns an Error if we are missing rights
|
||||||
|
/// and Ok(true) otherwise
|
||||||
pub fn has_throw(&self, permission: Rights) -> Result<bool, &'static str> {
|
pub fn has_throw(&self, permission: Rights) -> Result<bool, &'static str> {
|
||||||
if self.has(permission, true) {
|
if self.has(permission, true) {
|
||||||
Ok(true)
|
Ok(true)
|
||||||
|
|
Loading…
Reference in New Issue