95 lines
3 KiB
Go
95 lines
3 KiB
Go
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
|
|
}
|