54 lines
1.4 KiB
Go
54 lines
1.4 KiB
Go
|
|
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
|
||
|
|
}
|