Feat: get room members add role query

pull/134/head
zijiren233 2 years ago
parent 2c2271cb9a
commit b87e133dba

@ -260,7 +260,13 @@ func WhereIDLike(id string) func(db *gorm.DB) *gorm.DB {
func WhereRoomMemberStatus(status model.RoomMemberStatus) func(db *gorm.DB) *gorm.DB {
return func(db *gorm.DB) *gorm.DB {
return db.Where("status = ?", status)
return db.Where("room_members.status = ?", status)
}
}
func WhereRoomMemberRole(role model.RoomMemberRole) func(db *gorm.DB) *gorm.DB {
return func(db *gorm.DB) *gorm.DB {
return db.Where("room_members.role = ?", role)
}
}

@ -120,6 +120,27 @@ func (r *Room) IsCreator(userID string) bool {
return r.CreatorID == userID
}
func (r *Room) HasPermission(userID string, permission model.RoomMemberPermission) bool {
if r.IsCreator(userID) {
return true
}
rur, err := r.LoadOrCreateRoomMember(userID)
if err != nil {
return false
}
if rur.Role.IsAdmin() {
return true
}
switch permission {
}
return rur.HasPermission(permission)
}
func (r *Room) HasAdminPermission(userID string, permission model.RoomAdminPermission) bool {
if r.CreatorID == userID {
return true
@ -131,7 +152,7 @@ func (r *Room) HasAdminPermission(userID string, permission model.RoomAdminPermi
return rur.HasAdminPermission(permission)
}
func (r *Room) UserStatus(userID string) (model.RoomMemberStatus, error) {
func (r *Room) LoadOrCreateMemberStatus(userID string) (model.RoomMemberStatus, error) {
if r.CreatorID == userID {
return model.RoomMemberStatusActive, nil
}
@ -142,17 +163,15 @@ func (r *Room) UserStatus(userID string) (model.RoomMemberStatus, error) {
return rur.Status, nil
}
func (r *Room) HasPermission(userID string, permission model.RoomMemberPermission) bool {
func (r *Room) LoadMemberStatus(userID string) (model.RoomMemberStatus, error) {
if r.CreatorID == userID {
return true
return model.RoomMemberStatusActive, nil
}
rur, err := r.LoadOrCreateRoomMember(userID)
rur, err := r.LoadRoomMember(userID)
if err != nil {
return false
return model.RoomMemberStatusUnknown, err
}
return rur.HasPermission(permission)
return rur.Status, nil
}
func (r *Room) LoadOrCreateRoomMember(userID string) (*model.RoomMember, error) {
@ -192,6 +211,8 @@ func (r *Room) LoadOrCreateRoomMember(userID string) (*model.RoomMember, error)
member.Permissions = model.AllPermissions
member.AdminPermissions = model.AllAdminPermissions
member.Status = model.RoomMemberStatusActive
} else if member.Role.IsAdmin() {
member.Permissions = model.AllPermissions
}
member, _ = r.members.LoadOrStore(userID, member)
return member, nil
@ -211,12 +232,14 @@ func (r *Room) LoadRoomMember(userID string) (*model.RoomMember, error) {
member.Permissions = model.AllPermissions
member.AdminPermissions = model.AllAdminPermissions
member.Status = model.RoomMemberStatusActive
} else if member.Role.IsAdmin() {
member.Permissions = model.AllPermissions
}
member, _ = r.members.LoadOrStore(userID, member)
return member, nil
}
func (r *Room) GetRoomMemberPermission(userID string) (model.RoomMemberPermission, error) {
func (r *Room) LoadRoomMemberPermission(userID string) (model.RoomMemberPermission, error) {
if r.IsCreator(userID) {
return model.AllPermissions, nil
}
@ -227,7 +250,7 @@ func (r *Room) GetRoomMemberPermission(userID string) (model.RoomMemberPermissio
return member.Permissions, nil
}
func (r *Room) GetRoomAdminPermission(userID string) (model.RoomAdminPermission, error) {
func (r *Room) LoadRoomAdminPermission(userID string) (model.RoomAdminPermission, error) {
if r.IsCreator(userID) {
return model.AllAdminPermissions, nil
}

@ -231,6 +231,15 @@ func AdminGetRoomMembers(ctx *gin.Context) {
scopes = append(scopes, db.WhereRoomMemberStatus(dbModel.RoomMemberStatusActive))
}
switch ctx.DefaultQuery("role", "") {
case "admin":
scopes = append(scopes, db.WhereRoomMemberRole(dbModel.RoomMemberRoleAdmin))
case "member":
scopes = append(scopes, db.WhereRoomMemberRole(dbModel.RoomMemberRoleMember))
case "creator":
scopes = append(scopes, db.WhereRoomMemberRole(dbModel.RoomMemberRoleCreator))
}
switch ctx.DefaultQuery("sort", "name") {
case "join":
if desc {

@ -28,6 +28,15 @@ func RoomMembers(ctx *gin.Context) {
scopes := []func(db *gorm.DB) *gorm.DB{}
switch ctx.DefaultQuery("role", "") {
case "admin":
scopes = append(scopes, db.WhereRoomMemberRole(dbModel.RoomMemberRoleAdmin))
case "member":
scopes = append(scopes, db.WhereRoomMemberRole(dbModel.RoomMemberRoleMember))
case "creator":
scopes = append(scopes, db.WhereRoomMemberRole(dbModel.RoomMemberRoleCreator))
}
switch ctx.DefaultQuery("sort", "name") {
case "join":
if desc {
@ -118,6 +127,15 @@ func RoomAdminMembers(ctx *gin.Context) {
scopes = append(scopes, db.WhereRoomMemberStatus(dbModel.RoomMemberStatusActive))
}
switch ctx.DefaultQuery("role", "") {
case "admin":
scopes = append(scopes, db.WhereRoomMemberRole(dbModel.RoomMemberRoleAdmin))
case "member":
scopes = append(scopes, db.WhereRoomMemberRole(dbModel.RoomMemberRoleMember))
case "creator":
scopes = append(scopes, db.WhereRoomMemberRole(dbModel.RoomMemberRoleCreator))
}
switch ctx.DefaultQuery("sort", "name") {
case "join":
if desc {

@ -77,25 +77,27 @@ func AuthRoom(Authorization string) (*op.UserEntry, *op.RoomEntry, error) {
return nil, nil, ErrAuthFailed
}
u, err := op.LoadOrInitUserByID(claims.UserId)
userE, err := op.LoadOrInitUserByID(claims.UserId)
if err != nil {
return nil, nil, err
}
user := userE.Value()
if !u.Value().CheckVersion(claims.UserVersion) {
if !user.CheckVersion(claims.UserVersion) {
return nil, nil, ErrAuthExpired
}
r, err := op.LoadOrInitRoomByID(claims.RoomId)
roomE, err := op.LoadOrInitRoomByID(claims.RoomId)
if err != nil {
return nil, nil, err
}
room := roomE.Value()
if !r.Value().CheckVersion(claims.RoomVersion) {
if !room.CheckVersion(claims.RoomVersion) {
return nil, nil, ErrAuthExpired
}
rus, err := r.Value().UserStatus(u.Value().ID)
rus, err := room.LoadOrCreateMemberStatus(user.ID)
if err != nil {
return nil, nil, err
}
@ -106,7 +108,7 @@ func AuthRoom(Authorization string) (*op.UserEntry, *op.RoomEntry, error) {
return nil, nil, fmt.Errorf("user is banned")
}
return u, r, nil
return userE, roomE, nil
}
func AuthUser(Authorization string) (*op.UserEntry, error) {

Loading…
Cancel
Save