mirror of https://github.com/synctv-org/synctv
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.
67 lines
1.3 KiB
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
|
|
}
|
|
}
|