package repository import ( "seeyon-filesystem/config" "seeyon-filesystem/model" "gorm.io/gorm" ) // UserRoleRepository 用户-角色关联数据访问 type UserRoleRepository struct{} func NewUserRoleRepository() *UserRoleRepository { return &UserRoleRepository{} } // SetUserRoles 设置用户角色(全量替换) func (r *UserRoleRepository) SetUserRoles(userID uint64, roleIDs []uint64) error { return config.DB.Transaction(func(tx *gorm.DB) error { // 先删除旧关联 if err := tx.Where("user_id = ?", userID).Delete(&model.UserRole{}).Error; err != nil { return err } // 插入新关联 for _, rid := range roleIDs { ur := model.UserRole{UserID: userID, RoleID: rid} if err := tx.Create(&ur).Error; err != nil { return err } } return nil }) } // GetUserRoles 获取用户的角色列表 func (r *UserRoleRepository) GetUserRoles(userID uint64) ([]model.Role, error) { var roles []model.Role err := config.DB.Table("fs_role ro"). Joins("JOIN fs_user_role ur ON ur.role_id = ro.id"). Where("ur.user_id = ? AND ro.status = 1", userID). Find(&roles).Error return roles, err } // GetRoleUsers 获取角色下的用户列表 func (r *UserRoleRepository) GetRoleUsers(roleID uint64) ([]model.User, error) { var users []model.User err := config.DB.Table("fs_user u"). Joins("JOIN fs_user_role ur ON ur.user_id = u.id"). Where("ur.role_id = ?", roleID). Find(&users).Error return users, err }