Select Git revision
collection.go
collection.go 9.76 KiB
package collections
import (
"time"
"git.perx.ru/perxis/perxis-go/pkg/data"
"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
ReadFilter string // Дополнительный фильтр на чтение
WriteFilter string // Дополнительный фильтр на запись
Hidden bool // Скрыть коллекцию в интерфейсе от пользователя
}
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)),
Hidden: a.Hidden,
}
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"` // Коллекция скрыта в административном интерфейсе
NoArchive bool `json:"no_archive" bson:"no_archive,omitempty"` // Коллекция без архива
NoRevisions bool `json:"no_revisions" bson:"no_revisions,omitempty"` // Не хранить историю изменений