package repository import ( "seeyon-filesystem/config" "seeyon-filesystem/model" "gorm.io/gorm" ) // RoleRepository 角色数据访问 type RoleRepository struct{} func NewRoleRepository() *RoleRepository { return &RoleRepository{} } // Create 创建角色 func (r *RoleRepository) Create(role *model.Role) error { return config.DB.Create(role).Error } // FindByID 根据ID查找角色(含权限) func (r *RoleRepository) FindByID(id uint64) (*model.Role, error) { var role model.Role err := config.DB.Preload("Permissions").First(&role, id).Error if err != nil { return nil, err } return &role, nil } // FindByName 根据标识查找角色 func (r *RoleRepository) FindByName(name string) (*model.Role, error) { var role model.Role err := config.DB.Where("name = ?", name).First(&role).Error if err != nil { return nil, err } return &role, nil } // List 查询所有角色 func (r *RoleRepository) List() ([]model.Role, error) { var roles []model.Role err := config.DB.Preload("Permissions").Order("id ASC").Find(&roles).Error return roles, err } // Update 更新角色 func (r *RoleRepository) Update(role *model.Role) error { return config.DB.Save(role).Error } // Delete 删除角色(仅非系统角色) func (r *RoleRepository) Delete(id uint64) error { return config.DB.Transaction(func(tx *gorm.DB) error { // 删除角色-权限关联 if err := tx.Where("role_id = ?", id).Delete(&model.RolePermission{}).Error; err != nil { return err } // 删除用户-角色关联 if err := tx.Where("role_id = ?", id).Delete(&model.UserRole{}).Error; err != nil { return err } // 删除角色 return tx.Delete(&model.Role{}, id).Error }) } // SetPermissions 设置角色权限(全量替换) func (r *RoleRepository) SetPermissions(roleID uint64, permissionIDs []uint64) error { return config.DB.Transaction(func(tx *gorm.DB) error { // 先删除旧关联 if err := tx.Where("role_id = ?", roleID).Delete(&model.RolePermission{}).Error; err != nil { return err } // 插入新关联 for _, pid := range permissionIDs { rp := model.RolePermission{RoleID: roleID, PermissionID: pid} if err := tx.Create(&rp).Error; err != nil { return err } } return nil }) }