Opt: move relation func to relation file

pull/21/head
zijiren233 3 years ago
parent 927211c32d
commit 0af8b6b6d5

@ -9,9 +9,65 @@ import (
func GetRoomUserRelation(roomID, userID uint) (*model.RoomUserRelation, error) {
roomUserRelation := &model.RoomUserRelation{}
err := db.Where("room_id = ? AND user_id = ?", roomID, userID).First(roomUserRelation).Error
err := db.Where("room_id = ? AND user_id = ?", roomID, userID).Attrs(&model.RoomUserRelation{
RoomID: roomID,
UserID: userID,
Role: model.RoomRoleUser,
Permissions: model.DefaultPermissions,
}).FirstOrInit(roomUserRelation).Error
if err != nil && errors.Is(err, gorm.ErrRecordNotFound) {
return roomUserRelation, errors.New("room or user not found")
}
return roomUserRelation, err
}
func CreateRoomUserRelation(roomID, userID uint, role model.Role, permissions model.Permission) (*model.RoomUserRelation, error) {
roomUserRelation := &model.RoomUserRelation{
RoomID: roomID,
UserID: userID,
Role: role,
Permissions: permissions,
}
err := db.Create(roomUserRelation).Error
return roomUserRelation, err
}
func SetUserRole(roomID uint, userID uint, role model.Role) error {
err := db.Model(&model.RoomUserRelation{}).Where("room_id = ? AND user_id = ?", roomID, userID).Update("role", role).Error
if err != nil && errors.Is(err, gorm.ErrRecordNotFound) {
return errors.New("room or user not found")
}
return err
}
func SetUserPermission(roomID uint, userID uint, permission model.Permission) error {
err := db.Model(&model.RoomUserRelation{}).Where("room_id = ? AND user_id = ?", roomID, userID).Update("permissions", permission).Error
if err != nil && errors.Is(err, gorm.ErrRecordNotFound) {
return errors.New("room or user not found")
}
return err
}
func AddUserPermission(roomID uint, userID uint, permission model.Permission) error {
err := db.Model(&model.RoomUserRelation{}).Where("room_id = ? AND user_id = ?", roomID, userID).Update("permissions", db.Raw("permissions | ?", permission)).Error
if err != nil && errors.Is(err, gorm.ErrRecordNotFound) {
return errors.New("room or user not found")
}
return err
}
func RemoveUserPermission(roomID uint, userID uint, permission model.Permission) error {
err := db.Model(&model.RoomUserRelation{}).Where("room_id = ? AND user_id = ?", roomID, userID).Update("permissions", db.Raw("permissions & ?", ^permission)).Error
if err != nil && errors.Is(err, gorm.ErrRecordNotFound) {
return errors.New("room or user not found")
}
return err
}
func DeleteUserPermission(roomID uint, userID uint) error {
err := db.Unscoped().Where("room_id = ? AND user_id = ?", roomID, userID).Delete(&model.RoomUserRelation{}).Error
if err != nil && errors.Is(err, gorm.ErrRecordNotFound) {
return errors.New("room or user not found")
}
return err
}

@ -17,15 +17,22 @@ func WithSetting(setting model.Setting) CreateRoomConfig {
}
}
func WithCreaterID(createrID uint) CreateRoomConfig {
func WithCreator(creator *model.User) CreateRoomConfig {
return func(r *model.Room) {
r.CreatorID = createrID
r.Creator = *creator
r.GroupUserRelations = []model.RoomUserRelation{
{
UserID: creator.ID,
Role: model.RoomRoleCreator,
Permissions: model.AllPermissions,
},
}
}
}
func WithRelations(relations []model.RoomUserRelation) CreateRoomConfig {
return func(r *model.Room) {
r.GroupUserRelations = relations
r.GroupUserRelations = append(r.GroupUserRelations, relations...)
}
}
@ -150,38 +157,6 @@ func SetRoomHashedPassword(roomID uint, hashedPassword []byte) error {
return err
}
func SetUserRole(roomID uint, userID uint, role model.Role) error {
err := db.Model(&model.RoomUserRelation{}).Where("room_id = ? AND user_id = ?", roomID, userID).Update("role", role).Error
if err != nil && errors.Is(err, gorm.ErrRecordNotFound) {
return errors.New("room or user not found")
}
return err
}
func SetUserPermission(roomID uint, userID uint, permission model.Permission) error {
err := db.Model(&model.RoomUserRelation{}).Where("room_id = ? AND user_id = ?", roomID, userID).Update("permissions", permission).Error
if err != nil && errors.Is(err, gorm.ErrRecordNotFound) {
return errors.New("room or user not found")
}
return err
}
func AddUserPermission(roomID uint, userID uint, permission model.Permission) error {
err := db.Model(&model.RoomUserRelation{}).Where("room_id = ? AND user_id = ?", roomID, userID).Update("permissions", db.Raw("permissions | ?", permission)).Error
if err != nil && errors.Is(err, gorm.ErrRecordNotFound) {
return errors.New("room or user not found")
}
return err
}
func RemoveUserPermission(roomID uint, userID uint, permission model.Permission) error {
err := db.Model(&model.RoomUserRelation{}).Where("room_id = ? AND user_id = ?", roomID, userID).Update("permissions", db.Raw("permissions & ?", ^permission)).Error
if err != nil && errors.Is(err, gorm.ErrRecordNotFound) {
return errors.New("room or user not found")
}
return err
}
func GetAllRooms() ([]*model.Room, error) {
rooms := []*model.Room{}
err := db.Find(&rooms).Error

@ -59,7 +59,7 @@ func TestAddUserToRoom(t *testing.T) {
ur := model.RoomUserRelation{
UserID: 1,
RoomID: 1,
Role: model.RoleUser,
Role: model.RoomRoleUser,
Permissions: model.DefaultPermissions,
}
err = db.Create(&ur).Error

@ -5,10 +5,10 @@ import "gorm.io/gorm"
type Role uint32
const (
RoleBanned Role = iota + 1
RoleUser
RoleAdmin
RoleCreator
RoomRoleBanned Role = iota + 1
RoomRoleUser
RoomRoleAdmin
RoomRoleCreator
)
type Permission uint32
@ -48,11 +48,11 @@ type RoomUserRelation struct {
func (r *RoomUserRelation) HasPermission(permission Permission) bool {
switch r.Role {
case RoleCreator:
case RoomRoleCreator:
return true
case RoleAdmin:
return r.Permissions.Has(permission) // TODO: add more permissions
case RoleUser:
case RoomRoleAdmin:
return r.Permissions.Has(permission)
case RoomRoleUser:
return r.Permissions.Has(permission)
default:
return false

@ -24,14 +24,7 @@ func (u *User) CheckVersion(version uint32) bool {
}
func (u *User) CreateRoom(name, password string, conf ...db.CreateRoomConfig) (*model.Room, error) {
return db.CreateRoom(name, password, append(conf, db.WithCreaterID(u.ID), db.WithRelations(
[]model.RoomUserRelation{
{
UserID: u.ID,
Role: model.RoleCreator,
},
},
))...)
return db.CreateRoom(name, password, append(conf, db.WithCreator(&u.User))...)
}
func (u *User) NewMovie(movie model.BaseMovieInfo) model.MovieInfo {

@ -244,7 +244,7 @@ func AddAdmin(ctx *gin.Context) {
return
}
err := room.SetUserRole(req.UserId, dbModel.RoleAdmin)
err := room.SetUserRole(req.UserId, dbModel.RoomRoleAdmin)
if err != nil {
ctx.AbortWithStatusJSON(http.StatusInternalServerError, model.NewApiErrorResp(err))
return
@ -268,7 +268,7 @@ func DelAdmin(ctx *gin.Context) {
return
}
err := room.SetUserRole(req.UserId, dbModel.RoleUser)
err := room.SetUserRole(req.UserId, dbModel.RoomRoleUser)
if err != nil {
ctx.AbortWithStatusJSON(http.StatusInternalServerError, model.NewApiErrorResp(err))
return

Loading…
Cancel
Save