safing-portmaster/spn/terminal/permission.go

50 lines
1.3 KiB
Go

package terminal
// Permission is a bit-map of granted permissions.
type Permission uint16
// Permissions.
const (
NoPermission Permission = 0x0
MayExpand Permission = 0x1
MayConnect Permission = 0x2
IsHubOwner Permission = 0x100
IsHubAdvisor Permission = 0x200
IsCraneController Permission = 0x8000
)
// AuthorizingTerminal is an interface for terminals that support authorization.
type AuthorizingTerminal interface {
GrantPermission(grant Permission)
HasPermission(required Permission) bool
}
// GrantPermission grants the specified permissions to the Terminal.
func (t *TerminalBase) GrantPermission(grant Permission) {
t.lock.Lock()
defer t.lock.Unlock()
t.permission |= grant
}
// HasPermission returns if the Terminal has the specified permission.
func (t *TerminalBase) HasPermission(required Permission) bool {
t.lock.RLock()
defer t.lock.RUnlock()
return t.permission.Has(required)
}
// Has returns if the permission includes the specified permission.
func (p Permission) Has(required Permission) bool {
return p&required == required
}
// AddPermissions combines multiple permissions.
func AddPermissions(perms ...Permission) Permission {
var all Permission
for _, p := range perms {
all |= p
}
return all
}