From 4e1edff579ffd7079c3451768f88387817a1b721 Mon Sep 17 00:00:00 2001 From: zijiren233 Date: Tue, 16 Apr 2024 21:55:38 +0800 Subject: [PATCH] Feat: impl room permission settings --- internal/model/member.go | 30 ++++++++++++++++-------------- internal/op/room.go | 17 +++++++++++++---- 2 files changed, 29 insertions(+), 18 deletions(-) diff --git a/internal/model/member.go b/internal/model/member.go index 099b8db..cf0a406 100644 --- a/internal/model/member.go +++ b/internal/model/member.go @@ -151,25 +151,27 @@ type RoomMember struct { var ErrNoPermission = errors.New("no permission") func (r *RoomMember) HasPermission(permission RoomMemberPermission) bool { - switch r.Status { - case RoomMemberStatusActive: - return r.Permissions.Has(permission) - default: + if r.Role.IsAdmin() { + return true + } + if !r.Role.IsMember() { + return false + } + if r.Status != RoomMemberStatusActive { return false } + return r.Permissions.Has(permission) } func (r *RoomMember) HasAdminPermission(permission RoomAdminPermission) bool { - switch r.Status { - case RoomMemberStatusActive: - if !r.Role.IsAdmin() { - return false - } - if r.Role.IsCreator() { - return true - } - return r.AdminPermissions.Has(permission) - default: + if r.Role.IsCreator() { + return true + } + if !r.Role.IsAdmin() { + return false + } + if r.Status != RoomMemberStatusActive { return false } + return r.AdminPermissions.Has(permission) } diff --git a/internal/op/room.go b/internal/op/room.go index c99a218..ac5414d 100644 --- a/internal/op/room.go +++ b/internal/op/room.go @@ -134,21 +134,30 @@ func (r *Room) HasPermission(userID string, permission model.RoomMemberPermissio return true } - switch permission { - + switch { + case permission.Has(model.PermissionGetMovieList) && !r.Settings.CanGetMovieList, + permission.Has(model.PermissionAddMovie) && !r.Settings.CanAddMovie, + permission.Has(model.PermissionDeleteMovie) && !r.Settings.CanDeleteMovie, + permission.Has(model.PermissionEditMovie) && !r.Settings.CanEditMovie, + permission.Has(model.PermissionSetCurrentMovie) && !r.Settings.CanSetCurrentMovie, + permission.Has(model.PermissionSetCurrentStatus) && !r.Settings.CanSetCurrentStatus, + permission.Has(model.PermissionSendChatMessage) && !r.Settings.CanSendChatMessage: + return false + default: + return rur.Permissions.Has(permission) } - - return rur.HasPermission(permission) } func (r *Room) HasAdminPermission(userID string, permission model.RoomAdminPermission) bool { if r.CreatorID == userID { return true } + rur, err := r.LoadOrCreateRoomMember(userID) if err != nil { return false } + return rur.HasAdminPermission(permission) }