Feat: add guest permission setting

This commit is contained in:
zijiren233 2024-05-31 20:15:44 +08:00
parent c490b51423
commit 2796312d10
3 changed files with 19 additions and 23 deletions

View File

@ -28,7 +28,7 @@ func setLog(l *logrus.Logger) {
}
var logCallerIgnoreFuncs = map[string]struct{}{
"github.com/synctv-org/synctv/server/middlewares.Init.NewLog.func1": {},
"github.com/synctv-org/synctv/server/middlewares.logColor": {},
}
func InitLog(ctx context.Context) (err error) {

View File

@ -78,6 +78,7 @@ type RoomSettings struct {
JoinNeedReview bool `gorm:"default:false" json:"join_need_review"`
UserDefaultPermissions RoomMemberPermission `json:"user_default_permissions"`
DisableGuest bool `gorm:"default:false" json:"disable_guest"`
GuestPermissions RoomMemberPermission `json:"guest_permissions"`
CanGetMovieList bool `gorm:"default:true" json:"can_get_movie_list"`
CanAddMovie bool `gorm:"default:true" json:"can_add_movie"`
@ -95,6 +96,7 @@ func DefaultRoomSettings() *RoomSettings {
JoinNeedReview: false,
UserDefaultPermissions: DefaultPermissions,
DisableGuest: false,
GuestPermissions: NoPermission,
CanGetMovieList: true,
CanAddMovie: true,

View File

@ -246,23 +246,7 @@ func (r *Room) LoadOrCreateRoomMember(userID string) (*model.RoomMember, error)
if err != nil {
return nil, err
}
if r.IsCreator(userID) {
member.Role = model.RoomMemberRoleCreator
member.Permissions = model.AllPermissions
member.AdminPermissions = model.AllAdminPermissions
member.Status = model.RoomMemberStatusActive
} else if r.IsGuest(userID) {
member.Role = model.RoomMemberRoleMember
member.Permissions = model.NoPermission
member.AdminPermissions = model.NoAdminPermission
if member.Status.IsBanned() {
member.Status = model.RoomMemberStatusActive
}
} else if member.Role.IsAdmin() {
member.Permissions = model.AllPermissions
}
member, _ = r.members.LoadOrStore(userID, member)
return member, nil
return r.storeMember(userID, member), nil
}
func (r *Room) LoadRoomMember(userID string) (*model.RoomMember, error) {
@ -277,6 +261,10 @@ func (r *Room) LoadRoomMember(userID string) (*model.RoomMember, error) {
if err != nil {
return nil, fmt.Errorf("get room member failed: %w", err)
}
return r.storeMember(userID, member), nil
}
func (r *Room) storeMember(userID string, member *model.RoomMember) *model.RoomMember {
if r.IsCreator(userID) {
member.Role = model.RoomMemberRoleCreator
member.Permissions = model.AllPermissions
@ -284,7 +272,7 @@ func (r *Room) LoadRoomMember(userID string) (*model.RoomMember, error) {
member.Status = model.RoomMemberStatusActive
} else if r.IsGuest(userID) {
member.Role = model.RoomMemberRoleMember
member.Permissions = model.NoPermission
member.Permissions = r.Settings.GuestPermissions
member.AdminPermissions = model.NoAdminPermission
if member.Status.IsBanned() {
member.Status = model.RoomMemberStatusActive
@ -293,7 +281,7 @@ func (r *Room) LoadRoomMember(userID string) (*model.RoomMember, error) {
member.Permissions = model.AllPermissions
}
member, _ = r.members.LoadOrStore(userID, member)
return member, nil
return member
}
func (r *Room) LoadRoomMemberPermission(userID string) (model.RoomMemberPermission, error) {
@ -541,7 +529,7 @@ func (r *Room) SetMemberPermissions(userID string, permissions model.RoomMemberP
return errors.New("you are creator, cannot set permissions")
}
if r.IsGuest(userID) {
return errors.New("cannot set permissions to guest")
return errors.New("please set the permissions for the guest user in the room settings.")
}
defer r.members.Delete(userID)
return db.SetMemberPermissions(r.ID, userID, permissions)
@ -549,7 +537,7 @@ func (r *Room) SetMemberPermissions(userID string, permissions model.RoomMemberP
func (r *Room) AddMemberPermissions(userID string, permissions model.RoomMemberPermission) error {
if r.IsGuest(userID) {
return errors.New("cannot add permissions to guest")
return errors.New("please set the permissions for the guest user in the room settings.")
}
if r.IsAdmin(userID) {
return errors.New("cannot add permissions to admin")
@ -559,6 +547,9 @@ func (r *Room) AddMemberPermissions(userID string, permissions model.RoomMemberP
}
func (r *Room) RemoveMemberPermissions(userID string, permissions model.RoomMemberPermission) error {
if r.IsGuest(userID) {
return errors.New("please set the permissions for the guest user in the room settings.")
}
if r.IsAdmin(userID) {
return errors.New("cannot remove permissions from admin")
}
@ -579,7 +570,7 @@ func (r *Room) BanMember(userID string) error {
return errors.New("you are creator, cannot ban")
}
if r.IsGuest(userID) {
return errors.New("cannot ban guest")
return errors.New("please set whether to disable guest users in the room settings")
}
defer func() {
r.members.Delete(userID)
@ -592,6 +583,9 @@ func (r *Room) UnbanMember(userID string) error {
if r.IsCreator(userID) {
return errors.New("you are creator, cannot unban")
}
if r.IsGuest(userID) {
return errors.New("please set whether to enable guest users in the room settings")
}
defer r.members.Delete(userID)
return db.RoomUnbanMember(r.ID, userID)
}