package storage import ( "gorm.io/gorm" ) // A role is, in concept, similar to how Discord handles roles // Some permission can be either disallowed (&false), don't care (nil) or allowed (&true) // Don't care just says to use the value from the next lower role where it is set type Role struct { // TODO: More control options // Extend upon whatever Masto, Akkoma and Misskey have // Lots of details please // --- Role metadata --- // Include full db model stuff gorm.Model // Name of the role Name string // Priority of the role // Lower priority gets applied first and thus overwritten by higher priority ones // If two roles have the same priority, the order is undetermined and may be random // Default priority for new roles is 1 to always overwrite default user // And full admin has max priority possible Priority uint // Whether this role is for a for a single user only (like custom, per user permissions in Discord) // If yes, Name will be the id of the user in question IsUserRole bool // Whether this role is one built into Linstrom from the start or not // Note: Built-in roles can't be modified IsBuiltIn bool // --- User permissions --- CanSendMedia *bool CanSendCustomEmotes *bool CanSendCustomReactions *bool CanSendPublicNotes *bool CanSendLocalNotes *bool CanSendFollowerOnlyNotes *bool CanSendPrivateNotes *bool CanSendReplies *bool CanQuote *bool CanBoost *bool CanIncludeLinks *bool CanIncludeSurvey *bool CanChangeDisplayName *bool BlockedUsers []string `gorm:"type:bytes;serializer:gob"` CanSubmitReports *bool CanLogin *bool CanMentionOthers *bool HasMentionCountLimit *bool MentionLimit *uint32 // CanViewBoosts *bool // CanViewQuotes *bool // CanViewMedia *bool // CanViewCustomEmotes *bool // --- Automod --- AutoNsfwMedia *bool AutoCwPosts *bool AutoCwPostsText *string ScanCreatedPublicNotes *bool ScanCreatedLocalNotes *bool ScanCreatedFollowerOnlyNotes *bool ScanCreatedPrivateNotes *bool DisallowInteractionsWith []string `gorm:"type:bytes;serializer:gob"` WithholdNotesForManualApproval *bool WithholdNotesBasedOnRegex *bool WithholdNotesRegexes []string `gorm:"type:bytes;serializer:gob"` // --- Admin perms --- // If set, counts as all permissions being set as given and all restrictions being disabled FullAdmin *bool CanAffectOtherAdmins *bool CanDeleteNotes *bool CanConfirmWithheldNotes *bool CanAssignRoles *bool CanSupressInteractionsBetweenUsers *bool CanOverwriteDisplayNames *bool CanManageCustomEmotes *bool CanViewDeletedNotes *bool CanRecoverDeletedNotes *bool CanManageAvatarDecorations *bool CanManageAds *bool CanSendAnnouncements *bool }