54 lines
1.4 KiB
Go
54 lines
1.4 KiB
Go
package repositories
|
|
|
|
import (
|
|
"gitea.zjmud.com/phyer/rbac/models"
|
|
"gorm.io/gorm"
|
|
)
|
|
|
|
type RoleRepository struct {
|
|
*BaseRepository
|
|
}
|
|
|
|
func NewRoleRepository(db *gorm.DB) *RoleRepository {
|
|
return &RoleRepository{
|
|
BaseRepository: NewBaseRepository(db),
|
|
}
|
|
}
|
|
|
|
// 根据角色名称查找角色
|
|
func (r *RoleRepository) FindByName(role *models.Role, name string) error {
|
|
return r.db.Where("name = ?", name).First(role).Error
|
|
}
|
|
|
|
// 分页查询角色列表
|
|
func (r *RoleRepository) FindPaged(roles *[]models.Role, page, pageSize int, preloads ...string) error {
|
|
tx := r.db.Model(&models.Role{})
|
|
|
|
for _, preload := range preloads {
|
|
tx = tx.Preload(preload)
|
|
}
|
|
|
|
return tx.Scopes(func(db *gorm.DB) *gorm.DB {
|
|
return db.Offset((page - 1) * pageSize).Limit(pageSize)
|
|
}).Find(roles).Error
|
|
}
|
|
|
|
// 带权限关联的角色查询
|
|
func (r *RoleRepository) FindWithPermissions(role *models.Role, id uint) error {
|
|
return r.db.Preload("Permissions").First(role, id).Error
|
|
}
|
|
|
|
// 检查角色名称是否存在(排除当前角色)
|
|
func (r *RoleRepository) ExistsByNameExcludeID(name string, excludeID uint) (bool, error) {
|
|
var count int64
|
|
err := r.db.Model(&models.Role{}).
|
|
Where("name = ? AND id != ?", name, excludeID).
|
|
Count(&count).Error
|
|
return count > 0, err
|
|
}
|
|
|
|
// 同步角色权限关联
|
|
func (r *RoleRepository) SyncPermissions(role *models.Role, permissionIDs []uint) error {
|
|
return r.db.Model(role).Association("Permissions").Replace(permissionIDs)
|
|
}
|