package repositories import ( "gitea.zjmud.com/phyer/rbac/models" "gorm.io/gorm" ) type UserRepository interface { Create(user *models.User) error Update(user *models.User) error Delete(user *models.User) error FindByID(id uint) (*models.User, error) FindAll() ([]models.User, error) FindByUsername(username string) (*models.User, error) } type userRepository struct { *BaseRepository } func NewUserRepository(db *gorm.DB) UserRepository { return &userRepository{ BaseRepository: NewBaseRepository(db), } } func (r *userRepository) Create(user *models.User) error { return r.BaseRepository.Create(user) } func (r *userRepository) Update(user *models.User) error { return r.BaseRepository.Update(user) } func (r *userRepository) Delete(user *models.User) error { return r.BaseRepository.Delete(user) } func (r *userRepository) FindByID(id uint) (*models.User, error) { var user models.User err := r.BaseRepository.FindByID(&user, id) return &user, err } func (r *userRepository) FindAll() ([]models.User, error) { var users []models.User err := r.BaseRepository.FindAll(&users) return users, err } func (r *userRepository) FindByUsername(username string) (*models.User, error) { var user models.User err := r.db.Where("username = ?", username).First(&user).Error return &user, err } package repositories import ( "gitea.zjmud.com/phyer/rbac/models" "gorm.io/gorm" ) type UserRepository interface { Create(user *models.User) error Update(user *models.User) error Delete(user *models.User) error FindByID(id uint) (*models.User, error) FindAll() ([]models.User, error) FindByUsername(username string) (*models.User, error) GetUserRoles(userID uint) ([]models.Role, error) AssignRole(userID uint, roleID uint) error RemoveRole(userID uint, roleID uint) error } type userRepository struct { *BaseRepository } func NewUserRepository(db *gorm.DB) UserRepository { return &userRepository{ BaseRepository: NewBaseRepository(db), } } func (r *userRepository) Create(user *models.User) error { return r.BaseRepository.Create(user) } func (r *userRepository) Update(user *models.User) error { return r.BaseRepository.Update(user) } func (r *userRepository) Delete(user *models.User) error { return r.BaseRepository.Delete(user) } func (r *userRepository) FindByID(id uint) (*models.User, error) { var user models.User err := r.db.Preload("Roles").First(&user, id).Error return &user, err } func (r *userRepository) FindAll() ([]models.User, error) { var users []models.User err := r.BaseRepository.FindAll(&users, "Roles") return users, err } func (r *userRepository) FindByUsername(username string) (*models.User, error) { var user models.User err := r.db.Where("username = ?", username).First(&user).Error return &user, err } func (r *userRepository) GetUserRoles(userID uint) ([]models.Role, error) { var roles []models.Role err := r.db.Model(&models.User{ID: userID}).Association("Roles").Find(&roles) return roles, err } func (r *userRepository) AssignRole(userID uint, roleID uint) error { return r.db.Model(&models.User{ID: userID}).Association("Roles").Append(&models.Role{ID: roleID}) } func (r *userRepository) RemoveRole(userID uint, roleID uint) error { return r.db.Model(&models.User{ID: userID}).Association("Roles").Delete(&models.Role{ID: roleID}) }