You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
synctv/internal/model/relation.go

67 lines
1.3 KiB
Go

package model
import (
"errors"
"time"
)
type RoomUserStatus uint64
const (
RoomUserStatusBanned RoomUserStatus = iota + 1
RoomUserStatusPending
RoomUserStatusActive
)
func (r RoomUserStatus) String() string {
switch r {
case RoomUserStatusBanned:
return "banned"
case RoomUserStatusPending:
return "pending"
case RoomUserStatusActive:
return "active"
default:
return "unknown"
}
}
type RoomUserPermission uint64
const (
PermissionAll RoomUserPermission = 0xffffffff
PermissionEditRoom RoomUserPermission = 1 << iota
PermissionEditUser
PermissionCreateMovie
PermissionEditCurrent
PermissionSendChat
)
const (
DefaultPermissions = PermissionCreateMovie | PermissionEditCurrent | PermissionSendChat
)
func (p RoomUserPermission) Has(permission RoomUserPermission) bool {
return p&permission == permission
}
type RoomUserRelation struct {
CreatedAt time.Time
UpdatedAt time.Time
UserID string `gorm:"not null;primarykey"`
RoomID string `gorm:"not null;primarykey"`
Status RoomUserStatus `gorm:"not null;default:2"`
Permissions RoomUserPermission
}
var ErrNoPermission = errors.New("no permission")
func (r *RoomUserRelation) HasPermission(permission RoomUserPermission) bool {
switch r.Status {
case RoomUserStatusActive:
return r.Permissions.Has(permission)
default:
return false
}
}