Documentation ¶
Index ¶
- Constants
- Variables
- func CreateModelCreateError(store string) error
- func CreateModelDeleteError(store string) error
- func CreateModelReadError(store string) error
- func CreateModelUpdateError(store string) error
- func CreatePropDeleteError(prop string) error
- func CreatePropReadError(prop string) error
- func CreatePropUpdateError(prop string) error
- func Get() map[string]Store
- func GetAllStoreObjectsFromDb() map[string]Store
- func GetObjectsForUser(u User) map[string]*Store
- func Init(confFile string)
- func OnUpdate(fn func(map[string]Store))
- func ReloadConfig(conf map[string]Store)
- type Access
- type Action
- type CommonSettingsStructure
- type Condition
- type Filter
- type Hooks
- type HttpHook
- type Label
- type Prop
- type ServerSettingsStructure
- type State
- type Store
- func (m *Store) AfterExecAction(id string)
- func (m *Store) AfterExecHttpHook(id string)
- func (m *Store) BeforeExecAction(id string)
- func (m *Store) BeforeExecHttpHook(id string)
- func (m *Store) HasCreateAccess(data bdb.M, u User) bool
- func (m *Store) HasDeleteAccess(data bdb.M, u User) bool
- func (m *Store) HasReadAccess(data bdb.M, u User) bool
- func (m *Store) HasReadAccessJson(data []byte, u User) bool
- func (m *Store) HasUpdateAccess(data bdb.M, u User) bool
- func (m *Store) LoadDefaultIntoProp(name string, p Prop)
- func (m *Store) LoadDefaultValues(data bdb.M)
- func (m *Store) PrepareConfigForUser(u User)
- type Task
- type User
- type Value
- type Widget
Constants ¶
View Source
const ( ObjDirectory = "directory" ObjProcess = "process" ObjMap = "map" ObjWorkspace = "workspace" ObjCampaign = "campaign" ObjNotification = "notification" ObjSingle = "single" ObjFile = "file" ObjProxy = "proxy" SinglesBucket = "_singles" DeletedBucket = "_deleted" TempFileStoreBucket = "_tmpFiles" ApiKeysBucket = "apikeys" Deleted = "_deleted" DefaultDirectory = "_default" DefaultProcess = "_defaultProcess" DefaultCampaign = "_defaultCampaign" DefaultNotification = "_defaultNotifications" DefaultSingle = "_defaultSingle" ObjClientSettings = "_clientSettings" ObjServerSettings = "_serverSettings" ObjCommonSettings = "_commonSettings" ObjSysLog = "syslog" ObjSystemHealth = "systemHealth" PropInt = "int" PropFloat = "float" PropBool = "bool" PropString = "string" PropDate = "date" PropRef = "ref" PropRefList = "refList" PropVirtual = "virtual" PropVirtualClient = "virtual/client" PropPassword = "password" PropObject = "object" PropObjectList = "objectList" PropVirtualRefList = "virtualRefList" PropComments = "comments" PropDynamic = "dynamic" PropAction = "action" PropWidget = "widget" PropFile = "file" PropFileList = "fileList" TemplatePdf = "pdf" TemplateRtf = "rtf" TemplateHtml = "html" TemplateTxt = "txt" CreateAccess = "c" ReadAccess = "r" UpdateAccess = "u" DeleteAccess = "d" AllUsersGuid = "11111111-1111-1111-1111-111111111111" RootGuid = "00000000-0000-0000-0000-000000000000" UsersBucket = "users" ArchiveState = "_archive" )
Variables ¶
View Source
var ( PropDisplay = []string{ "autocomplete", "textInput", "numberInput", "floatInput", "textArea", "searchBox", "select", "datePicker", "timePicker", "dateTimePicker", "colorPicker", "filePicker", "commentsEditor", "masked", "checkbox", "checkList", "password", "headerInput", "text", "code", "codeEditor", "link", "dataTable", "html", "react", "none", "", } ObjectDisplay = []string{ "none", "table", "grid", "list", "html", "single", "", } ActionType = []string{ "script", "form", "", } HttpApiEnabledStores = []Store{} DB = bdb.DB{} )
View Source
var ( CommonSettings *CommonSettingsStructure ServerSettings *ServerSettingsStructure ClientSettings bdb.M )
Functions ¶
func CreateModelCreateError ¶
func CreateModelDeleteError ¶
func CreateModelReadError ¶
func CreateModelUpdateError ¶
func CreatePropDeleteError ¶
func CreatePropReadError ¶
func CreatePropUpdateError ¶
func GetObjectsForUser ¶
func ReloadConfig ¶
Types ¶
type Access ¶
type Access struct { Role string `json:"role"` // Роль, для которой определяется доступ Permissions string `json:"permissions"` // Права на доступ ГРУППА|ВЛАДЕЛЕЦ (crud|rud в любом сочетании), если для группы стоит знак "-", то прав на стору нет вообще. Перед каждой буквой тоже может стоять "-". Condition interface{} `json:"condition"` }
type Action ¶
type Action struct { Id string `json:"_id"` ClassName string `json:"className,omitempty"` // CSS class ClientPreScript string `json:"clientPreScript,omitempty"` // JavaScript scenario that will run in browser before request to server ClientPostScript string `json:"clientPostScript,omitempty"` // JavaScript scenario that will run in browser after server response ConcurentCallsLimit int `json:"concurentCallsLimit,omitempty"` // Max concurrent calls of action Disabled interface{} `json:"disabled,omitempty"` // Disabled conditions, JavaScript expression DisableItemReadyCheck bool `json:"disableItemReadyCheck"` // Enables action on modified item DynamicLabel bool `json:"dynamicLabel,omitempty"` // If true, action lable renders on every item or user change Hidden interface{} `json:"hidden,omitempty"` // Hidden conditions, JavaScript expression HideInHeader bool `json:"hideInHeader"` // Hides action in item header Icon string `json:"icon" ws:"yes"` // Icon for label Label string `json:"label" ws:"yes"` // Text for label, HandleBars template Multi bool `json:"multi"` // Enables action for multiple items !!!NOT IMPLEMENTED!!! Script string `json:"script,omitempty"` // Action JavaScript scenario ScriptLineOffset int `json:"-"` // LineOffset when load script to v8 ScriptId string `json:"-"` // Script Id to call in worker Type string `json:"type,omitempty"` //Access Access []Access `json:"access,omitempty"` // Action access rules. GroupAccess string `json:"groupAccess"` // Calculated access, not used in config OwnerAccess string `json:"ownerAccess"` // Calculated access, not used in config //Actions with type=form FormLabel string `json:"formLabel,omitempty" ws:"yes"` // Text form header, HandleBars template CancelLabel string `json:"cancelLabel,omitempty"` // Text in form cancel button, HandleBars template OkLabel string `json:"okLabel,omitempty"` // Text in form submit button, HandleBars template Props map[string]Prop `json:"props" ws:"yes"` // Form properties }
Action – struct for JavaScript scenarios that can be performed by users
type CommonSettingsStructure ¶
type CommonSettingsStructure struct { UserActivation bool `json:"userActivation,omitempty"` BaseUrl string `json:"baseUrl,omitempty"` DefaultLocale string `json:"defaultLocale,omitempty"` I18n map[string]interface{} `json:"i18n,omitempty"` LessVars map[string]interface{} `json:"lessVars,omitempty"` }
type Condition ¶
type Condition struct { Property string `json:"property"` // Свойство объекта, которое нужно проверять Value interface{} `json:"value"` // Сравниваемое значение Operator string `json:"operator"` // Оператор для сравнения. =|!=|contain|contains|<|>|<=|>= ValString string `json:"-"` // Строка из Value для строковых пропертей, проп типа date, ref ValInt int `json:"-"` // Int из Value для проперти типа int ValFloat float64 `json:"-"` // Float из Value для проперти типа float ValBool bool `json:"-"` // True или false из Value для проперти типа bool PropType string `json:"-"` // Тип проперти для дальнейшей работы }
type Filter ¶
type Filter struct { Label string `json:"label,omitempty" ws:"yes"` // Вариации названий в браузере Display string `json:"display" ws:"yes"` // textInput, searchBox, select, masked Placeholder string `json:"placeholder,omitempty" ws:"yes"` // Применимо для display:textInput Conditions []Condition `json:"conditions,omitempty" ws:"yes"` // Свойства, для которых будет применен фильтр SearchBy []string `json:"searchBy,omitempty"` // display:searchBox Поля для поиска для элемента searchBox // TODO: сделать валидацию Store string `json:"store,omitempty"` // display:searchBox Имя сторы FilterBy string `json:"filterBy,omitempty"` // display:searchBox Имя сторы для поля типа ref Options []Value `json:"options,omitempty"` // display:select Перечень для селектов и прочего // TODO: валидация Mask string `json:"mask,omitempty" ws:"yes"` // display:masked Применимо только для строк Multi bool `json:"multi" ws:"yes"` // display:searchBox Возможность выбора нескольких элементов FormOrder int `json:"formOrder,omitempty"` // Порядок отображения на форме Style bdb.M `json:"style,omitempty" ws:"yes"` // CSS Query interface{} `json:"query,omitempty"` // Запрос для монги }
type Hooks ¶
type Hooks struct { WillCreate string `json:"willCreate,omitempty"` // Вызывается перед сохранением нового объекта/сторы WillCreateScriptId string `json:"-"` // Script Id to call in worker DidCreate string `json:"didCreate,omitempty"` // Вызывается после сохранения нового объекта/сторы DidCreateScriptId string `json:"-"` // Script Id to call in worker WillSave string `json:"willSave,omitempty"` // Вызывается перед сохранением существующего объекта/сторы WillSaveScriptId string `json:"-"` // Script Id to call in worker DidSave string `json:"didSave,omitempty"` // Вызывается после сохранения существующего объекта/сторы DidSaveScriptId string `json:"-"` // Script Id to call in worker WillRemove string `json:"willRemove,omitempty"` // Вызывается перед удалением объекта/сторы WillRemoveScriptId string `json:"-"` // Script Id to call in worker DidRemove string `json:"didRemove,omitempty"` // Вызывается после удаления объекта/сторы DidRemoveScriptId string `json:"-"` // Script Id to call in worker DidRead string `json:"didRead,omitempty"` // Вызывается при запрашивании конкретного объекта из сторы. Для сторы не применимо DidReadScriptId string `json:"-"` // Script Id to call in worker DidStart string `json:"didStart,omitempty"` // Вызывается после старта хранилища DidStartScriptId string `json:"-"` // Script Id to call in worker }
Содержит в себе исполняемые скрипты на JavaScript
type HttpHook ¶
type HttpHook struct { Uri string `json:"uri"` // URI, по которому будет доступен хук. Например, если uri=users, то хук будет http://server-address/hooks/users Method string `json:"method"` // HTTP method (GET, POST, PUT, PATCH, DELETE, HEAD, OPTIONS) Script string `json:"script"` // Javascript code of hook ScriptId string `json:"-"` // Script Id to call in worker ConcurentCallsLimit int `json:"concurentCallsLimit,omitempty"` // Max concurrent calls of http hook }
type Label ¶
type Label struct { Text string `json:"text,omitempty" ws:"yes"` // Текст лейблы Icon string `json:"icon,omitempty" ws:"yes"` // Иконка слева от текста (только CSS класс) ShowInList int `json:"showInList,omitempty" ws:"yes"` // Порядок отображения в списке. Если 0, не отображать HideInForm bool `json:"hideInForm,omitempty" ws:"yes"` // Не показывать на основой форме Color string `json:"color,omitempty" ws:"yes"` // Цвет рамочки на форме и цвет текста в списке Hidden string `json:"hidden,omitempty"` // Hidden conditions, JavaScript expression }
type Prop ¶
type Prop struct { Name string `json:"name"` // Название проперти Label string `json:"label,omitempty" ws:"yes"` // Вариации названий в браузере Type string `json:"type"` // Допустимые варианты: int, float, bool, string, date, ref, virtual OppositeProp string `json:"oppositeProp"` // Для type = ref, соответствующая поле в противоположной сторе FormTab string `json:"formTab" ws:"yes"` // Определяет страницу на форме, в которой будет отрисовано поле FormGroup string `json:"formGroup" ws:"yes"` // Определяет группу на форме, в которой будет отрисовано поле FormOrder int `json:"formOrder" ws:"yes"` // Определяет порядок отрисовки на форме. Если поле в группе, определяет порядок отрисовки именно в этой группе. Access []Access `json:"access"` // Разрешения для работы с полем GroupAccess string `json:"groupAccess"` // Разрешения для работы с полем в виде вычисленной для конкретного юзера строки (crud) OwnerAccess string `json:"ownerAccess"` // Разрешения для работы с полем в виде вычисленной для конкретного владельца строки (crud) Display string `json:"display" ws:"yes"` // text, textArea, datePicker, timePicker, dateTimePicker, masked, none DisplayWidth int `json:"displayWidth" ws:"yes"` // Ширина инпута в процентах для вложенных объектов с шагом в 5 Style bdb.M `json:"style,omitempty" ws:"yes"` // Внезапно: пока не определим нужный набор свойств отображения, прокину как я CSS ClassName string `json:"сlassName,omitempty"` // CSS класс для контейнера на форме LabelClassName string `json:"labelClassName,omitempty"` // CSS класс для лейбла HTML string `json:"html,omitempty" ws:"yes"` // Html for display=html HTMLFile string `json:"htmlFile,omitempty" ws:"yes"` // Файл с шаблоном Html for display=html SearchBy []string `json:"searchBy,omitempty"` // Поля для поиска для элемента searchBox // TODO: сделать валидацию SelectedTemplate string `json:"selectedTemplate,omitempty"` // Шаблон выбранного элемента для searchBox SortBy string `json:"sortBy,omitempty"` // Поля для сортировки, если пропа virtual // TODO: сделать валидацию ReadOnly bool `json:"readOnly"` // Поле только для чтения Required interface{} `json:"required,omitempty" ws:"yes"` // Поле является обязательным Default interface{} `json:"default,omitempty" ws:"yes"` // Значение по умолчанию MinLength int `json:"minLength,omitempty" ws:"yes"` // Применимо только для строк MaxLength int `json:"maxLength,omitempty" ws:"yes"` // Применимо только для строк Min interface{} `json:"min,omitempty"` // Применимо только для числовых типов Max interface{} `json:"max,omitempty"` // Применимо только для числовых типов Pattern interface{} `json:"pattern,omitempty" ws:"yes"` // Применимо только для строк PatternError string `json:"patternError,omitempty" ws:"yes"` // Применимо только для строк. Ошибка которая отобразится, если введенное значение не соответствует паттерну PatternCompiled *regexp.Regexp `json:"-"` // Применимо только для строк Mask interface{} `json:"mask,omitempty" ws:"yes"` // Применимо только для строк Accept string `json:"accept,omitempty" ws:"yes"` // Применимо только для файлов AddLabel string `json:"addLabel,omitempty" ws:"yes"` // Применимо только для ObjectList Sortable bool `json:"sortable,omitempty" ws:"yes"` // Применимо только для ObjectList, перетаскивание TableColumns []interface{} `json:"tableColumns,omitempty" ws:"yes"` // Применимо только для VirtualRefList Placeholder string `json:"placeholder,omitempty" ws:"yes"` // Применимо для строк и числовых типов Load string `json:"load,omitempty"` // Функция на JS, применима к типу virtual LoadComponent string `json:"loadComponent,omitempty"` // Функция на JS для display==='react' Store string `json:"store,omitempty"` // Имя сторы для поля типа ref ForeignKey string `json:"foreignKey,omitempty"` // Имя пропы в референсной сторе для поля типа virtualRefList PopulateIn string `json:"populateIn,omitempty"` // Куда складывать популизованные данные. Если значения нет, то популяция не требуется Configurable bool `json:"configurable,omitempty"` // Только для объекта _default. Если true, то админ может переопределить настроки поля Hidden interface{} `json:"hidden,omitempty" ws:"yes"` // Hidden conditions, JavaScript expression Disabled interface{} `json:"disabled,omitempty" ws:"yes"` // Disabled conditions, JavaScript expression DisableOrder bool `json:"disableOrder,omitempty" ws:"yes"` // Запрет сортировки по полю DisableCustomInput bool `json:"disableCustomInput,omitempty" ws:"yes"` // Запрет ручного ввода данных для некоторых типов отображения Tooltip string `json:"tooltip,omitempty" ws:"yes"` // Тултип в формате markdown Props map[string]Prop `json:"props,omitempty" ws:"yes"` // Перечень свойств вложенного объекта Options []interface{} `json:"options,omitempty"` // Перечень для селектов и прочего // TODO: валидация NoSanitize bool `json:"noSanitize,omitempty"` // Флаг указывающий на то, что html безопасный в пропе. DisableRefSync bool `json:"disableRefSync,omitempty"` // Флаг, запрещающий обновление соответствующего ref поля в противоположной сторе TableLink bool `json:"tableLink,omitempty" ws:"yes"` // Флаг обозначающий, что эта пропертя в таблице будет ссылкой Actions interface{} `json:"actions,omitempty" ws:"yes"` // Action identifier or array of identifiers WidgetID string `json:"widgetId,omitempty" ws:"yes"` // Widget identifier Utc bool `json:"utc,omitempty" ws:"yes"` // Работа с датами в utc - игнорирует локальное время. Только для типа date Format string `json:"format,omitempty" ws:"yes"` // Формат отображения. Только для типа date // contains filtered or unexported fields }
type ServerSettingsStructure ¶
type ServerSettingsStructure struct { RegisterTokenExpiration int `json:"registerTokenExpiration,omitempty"` PasswordResetTokenExpiration int `json:"passwordResetTokenExpiration,omitempty"` ActivationEmailTemplate string `json:"activationEmailTemplate,omitempty"` PasswordResetEmailTemplate string `json:"passwordResetEmailTemplate,omitempty"` PasswordResetSuccessEmailTemplate string `json:"passwordResetSuccessEmailTemplate,omitempty"` RegistrationSuccessEmailTemplate string `json:"registrationSuccessEmailTemplate,omitempty"` ActivationSuccessPage string `json:"activationSuccessPage,omitempty"` ActivationErrorPage string `json:"activationErrorPage,omitempty"` FileStorePath string `json:"fileStorePath,omitempty"` VMPoolSize int `json:"vmPoolSize,omitempty"` MaxLogSize int `json:"maxLogSize,omitempty"` MemoryCheckingInterval int `json:"memoryCheckingInterval,omitempty"` MemoryUsageToCleanWorkers float64 `json:"memoryUsageToCleanWorkers,omitempty"` Port string `json:"port,omitempty"` DBDriver string `json:"dbDriver,omitempty"` MongoURI string `json:"mongoURI,omitempty"` }
type Store ¶
type Store struct { Type string `json:"type"` // Допустимые пока варианты: directory (простые справочники), process (справочники с состояниями и действиями над объектами), workspace (воркспейсы), inConfigSet (набор каких-то значений) BaseStore string `json:"baseStore,omitempty"` // Только для Type == 'proxy'. Содержит стору на которую производится проксирование. Access []Access `json:"access,omitempty"` // Разрешения для работы с объектом. Если не заполнено, то доступ разрешён всем GroupAccess string `json:"groupAccess"` // Разрешения для работы с объектом в виде вычисленной для конкретного юзера строки (crud) OwnerAccess string `json:"ownerAccess"` // Разрешения для работы с объектом в виде вычисленной для конкретного владельца строки (crud) I18n map[string]interface{} `json:"i18n" ws:"yes"` // Вариации названий в браузере HeaderTemplate string `json:"headerTemplate,omitempty"` // Шаблон {{}} для отображения заголовка выбранного элемента HeaderProperty string `json:"headerProperty,omitempty"` // property для отображения заголовка выбранного элемента Icon string `json:"icon,omitempty"` // Иконка для отображения в меню и в центре уведомлений Props map[string]Prop `json:"props" ws:"yes"` // Перечень свойств объекта Filters map[string]Filter `json:"filters" ws:"yes"` // Перечень фильтров сторы ObjectLifeCycle Hooks `json:"objectLifeCycle,omitempty"` // Хуки на события жизненного цикла объекта StoreLifeCycle Hooks `json:"storeLifeCycle,omitempty"` // Хуки на события жизненного цикла сторы FormGroupsOrder []string `json:"formGroupsOrder" ws:"yes"` // Порядок групп свойств на форме по-умолчанию FormTabs []interface{} `json:"formTabs" ws:"yes"` // Описание и порядок страниц на форме States map[string]State `json:"states,omitempty"` // Только для типа "process". Список возможных состояний Actions []Action `json:"actions,omitempty"` // Перечень действий над объектом StoreActions []Action `json:"storeActions,omitempty"` // Перечень действий при поступлении внешних событий Widgets []Widget `json:"widgets,omitempty"` // Виджеты, используются для display:dashboard и property.type:widget Entries map[string]interface{} `json:"entries,omitempty"` // Значения для type == 'map' Display string `json:"display" ws:"yes"` // Вид отображения Html string `json:"html" ws:"yes"` // Шаблон для display:html Label string `json:"label,omitempty"` // Заголовок сторы Labels []Label `json:"labels,omitempty"` // Лейблы TableColumns []interface{} `json:"tableColumns,omitempty" ws:"yes"` // Только для display:dataTable DisableAutoSelect bool `json:"disableAutoSelect,omitempty" ws:"yes"` // Только для display:listView OrderBy string `json:"orderBy,omitempty" ws:"yes"` // Сортировка данных по умолчанию. Config map[string]Store `json:"config,omitempty"` // Конфиг, переопределяющий некоторые параметры. Только для type:workspace ListViewOnly bool `json:"listViewOnly,omitempty" ws:"yes"` // Параметр, определяющий отображение сторы. FullWidth bool `json:"fullWidth,omitempty" ws:"yes"` // Параметр отображения контента во всю ширину, когда не используется боковая панель. DisablePartialLoad bool `json:"disablePartialLoad,omitempty" ws:"yes"` // TODO: Если true, то выдавать при запросе всех объектов, все поля сразу. HttpApi bool `json:"httpApi,omitempty"` // Флаг формирования HTTP REST API для сторы HttpHooks []HttpHook `json:"httpHooks,omitempty"` // Http хуки (HTTP API). Tasks []*Task `json:"tasks,omitempty"` // Периодические задачи для сторы PrepareItemsScript string `json:"prepareItemsScript,omitempty"` // Скрипт для подготовки данных до передачи в рендер свойства html Template string `json:"template,omitempty"` // Шаблон для передачи в свойство html TemplateFile string `json:"templateFile,omitempty"` // Фвйл с шаблоном для передачи в свойство html Indexed bool `json:"indexed,omitempty"` // Флаг использования индекса elasticSearch для сторы PartialProps []string `json:"-"` // Массив с полями, которые нужно выдать при запросе всех объектов. Заполняется из labels PartialVirtual bool `json:"-"` // Флаг, означающий, что нужно заполнять виртуальные поля при выдаче всех объектов PartialPopulate bool `json:"-"` // Флаг, означающий, что нужно провести популяцию при выдаче всех объектов Store string `json:"store"` // Имя сторы для хранения. Берётся из ключа мапы Logging bool `json:"logging,omitempty"` // Флаг указывающий на необходимость ведения журнала действий HasVirtualProps bool `json:"hasVirtualProps,omitempty"` // Флаг указывающий наличие виртуальных полей в сторе Proxies []string `json:"-"` // Список прокси стор для базовой сторы, если имеются }
func GetStoreObject ¶
func GetStoreObjectFromDb ¶
func (*Store) AfterExecAction ¶
func (*Store) AfterExecHttpHook ¶
func (*Store) BeforeExecAction ¶
func (*Store) BeforeExecHttpHook ¶
func (*Store) LoadDefaultIntoProp ¶
func (*Store) LoadDefaultValues ¶
func (*Store) PrepareConfigForUser ¶
type Value ¶
type Value struct { Value interface{} `json:"value"` // Значение, которое будет присвоено полю Label string `json:"label"` // Лейбла, которая отображается в браузере, или будет переведена для отображения }
type Widget ¶
type Widget struct { Id string `json:"_id"` Type string `json:"type,omitempty"` Label string `json:"label" ws:"yes"` // Лейбла в браузере Render string `json:"render,omitempty"` // Скрипт на JS для отрисовки Access []Access `json:"access,omitempty"` // Разрешения для работы с виджетом. Если не заполнено, то доступ разрешён всем GroupAccess string `json:"groupAccess"` // Разрешения для работы с виджетом в виде вычисленной для конкретного юзера строки (crud) OwnerAccess string `json:"ownerAccess"` // Разрешения для работы с виджетом в виде вычисленной для конкретного владельца строки (crud) ClassName string `json:"className,omitempty"` // CSS class, который требуется навесить на кнопку Style bdb.M `json:"style,omitempty" ws:"yes"` // Дополнительные CSS виджета }
Click to show internal directories.
Click to hide internal directories.