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/op/user.go

81 lines
1.7 KiB
Go

package op
import (
"errors"
"github.com/synctv-org/synctv/internal/db"
"github.com/synctv-org/synctv/internal/model"
)
type User struct {
model.User
}
func (u *User) CreateRoom(name, password string, conf ...db.CreateRoomConfig) (*model.Room, error) {
return db.CreateRoom(name, password, append(conf, db.WithCreator(&u.User))...)
}
func (u *User) NewMovie(movie model.MovieInfo) model.Movie {
return model.Movie{
MovieInfo: movie,
CreatorID: u.ID,
}
}
func (u *User) IsRoot() bool {
return u.Role == model.RoleRoot
}
1 year ago
func (u *User) IsAdmin() bool {
return u.Role >= model.RoleAdmin
1 year ago
}
func (u *User) IsBanned() bool {
return u.Role == model.RoleBanned
}
func (u *User) IsPending() bool {
return u.Role == model.RolePending
}
func (u *User) HasPermission(roomID uint, permission model.Permission) bool {
if u.Role >= model.RoleAdmin {
return true
}
ur, err := db.GetRoomUserRelation(roomID, u.ID)
if err != nil {
return false
}
return ur.HasPermission(permission)
}
func (u *User) DeleteRoom(roomID uint) error {
if !u.HasPermission(roomID, model.CanDeleteRoom) {
return errors.New("no permission")
}
return DeleteRoom(roomID)
}
func (u *User) SetRoomPassword(roomID uint, password string) error {
if !u.HasPermission(roomID, model.CanSetRoomPassword) {
return errors.New("no permission")
}
return SetRoomPassword(roomID, password)
}
func (u *User) SetRole(role model.Role) error {
if err := db.SetRoleByID(u.ID, role); err != nil {
return err
}
u.Role = role
return nil
}
func (u *User) SetUsername(username string) error {
if err := db.SetUsernameByID(u.ID, username); err != nil {
return err
}
u.Username = username
return nil
}