rbac/repositories/role.go
zhangkun9038@dingtalk.com 375b305ab4 aliyun-deepseek-r1
2025-02-20 11:29:57 +08:00

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)
}