Skip to content
Snippets Groups Projects
Select Git revision
  • e59e0fcbd5cbc745470cc0c51deb948bf2573ad3
  • master default protected
  • feature/3109-SerializeFeature
  • release/0.33
  • feature/3109-RecoverySchema
  • feature/3109-feature
  • fix/PRXS-3369-ValidateFields
  • fix/3368-SchemaIsEqual
  • fix/3355-DecodeNumberFields
  • refactor/PRXS-3306-MovePkgGroup1
  • refactor/6-pkg-refactor-expr
  • fix/PRXS-3357-FixRefEncode
  • fix/PRXS-3360-TemplateBuilderPatch
  • feature/3293-MongoV2
  • feature/3272-GoVersionUp
  • feature/PRXS-3218-HideTemplateActions
  • feature/PRXS-3234-PruneIdents
  • feature/3146-UpdateItemStorageInterface
  • feature/3274-ObjectIndexesFixes
  • feature/PRXS-3143-3235-ReferenceOptions
  • feature/PRXS-3143-3237-ExecuteOptions
  • v0.33.1
  • v0.32.0
  • v0.31.1
  • v0.31.0
  • v0.30.0
  • v0.29.0
  • v0.28.0
  • v0.27.0-alpha.1+16
  • v0.27.0-alpha.1+15
  • v0.27.0-alpha.1+14
  • v0.27.0-alpha.1+13
  • v0.27.0-alpha.1+12
  • v0.27.0-alpha.1+11
  • v0.27.0-alpha.1+10
  • v0.27.0-alpha.1+9
  • v0.27.0-alpha.1+8
  • v0.27.0-alpha.1+7
  • v0.27.0-alpha.1+6
  • v0.27.0-alpha.1+5
  • v0.27.0-alpha.1+4
41 results

collection.go

Blame
  • collection.go 6.48 KiB
    package collections
    
    import (
    	"time"
    
    	"git.perx.ru/perxis/perxis-go/pkg/permission"
    	"git.perx.ru/perxis/perxis-go/pkg/schema"
    )
    
    // Config
    type Config struct {
    	SourceSpaceID      string
    	SourceEnvID        string
    	SourceCollectionID string
    	SourceSchema       *schema.Schema
    }
    
    // Access - описывает текущие ограничения на доступ к элементам коллекции для текущего
    // пользователя
    type Access struct {
    	Actions         []permission.Action // Список разрешенных действия с элементами коллекции
    	HiddenFields    []string            // Поля не отображаемые в интерфейсе и не возвращаемые API
    	DenyReadFields  []string            // Поля недоступные для редактирования и не обновляемые через API
    	DenyWriteFields []string            // Поля отображаемые в интерфейсе, но не возвращаемые в API
    }
    
    func (a Access) Clone() *Access {
    
    	clone := &Access{
    		Actions:         make([]permission.Action, len(a.Actions)),
    		HiddenFields:    make([]string, len(a.HiddenFields)),
    		DenyReadFields:  make([]string, len(a.DenyReadFields)),
    		DenyWriteFields: make([]string, len(a.DenyWriteFields)),
    	}
    
    	copy(clone.Actions, a.Actions)
    	copy(clone.HiddenFields, a.HiddenFields)
    	copy(clone.DenyReadFields, a.DenyReadFields)
    	copy(clone.DenyWriteFields, a.DenyWriteFields)
    
    	return clone
    }
    
    func (a Access) Can(action permission.Action) bool {
    	for _, act := range a.Actions {
    		if act == action {
    			return true
    		}
    	}
    	return false
    }
    
    type Collection struct {
    	ID      string         `json:"id" bson:"id"`
    	SpaceID string         `json:"spaceId" bson:"-"`
    	EnvID   string         `json:"envId" bson:"-"`
    	Name    string         `json:"name" bson:"name"`
    	Single  *bool          `json:"single" bson:"single,omitempty"` // В коллекции может быть только один документ
    	System  *bool          `json:"system" bson:"system,omitempty"` // Системная коллекция
    	NoData  *bool          `json:"no_data" bson:"no_data"`         // Коллекция не содержит элементы. Схема используется для включения в другие схемы
    	Hidden  bool           `json:"hidden" bson:"hidden"`           // Коллекция скрыта в административном интерфейсе
    	Schema  *schema.Schema `json:"schema" bson:"schema"`
    	Access  *Access        `json:"access" bson:"-"` // Ограничения на доступ к элементам коллекции. Отсутствие объекта означает неограниченный доступ
    
    	// StateInfo отображает состояние коллекции:
    	// - State: идентификатор состояния коллекции (new/preparing/ready/error/changed)
    	// - Info: дополнительная информация о состоянии коллекции (например, если при
    	//   применении схемы к коллекции произошла ошибка)
    	// - StartedAt: время, в которое коллекция перешла в состояние `Preparing`
    	StateInfo *StateInfo `json:"state_info" bson:"state_info,omitempty"` // todo: показывать в интерфейсе как readonly