/*Спецификации с версионностью
*/
-- можно добавить базовые единицы и пересчет
drop table if exists measure CASCADE;
create table measure (
measure_id int GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY NOT NULL
,measure varchar(255) NOT NULL
,measure_short varchar(9) NOT NULL
,creator_id int NULL
,updater_id int NULL
,dt_created timestamp NOT NULL default CURRENT_TIMESTAMP -- дата записи
,dt_updated timestamp NOT NULL default CURRENT_TIMESTAMP -- дата последней модификации
);
insert into measure (measure, measure_short) values ('штука','шт.');
insert into measure (measure, measure_short) values ('киловатт','кВт');
insert into measure (measure, measure_short) values ('киловатт-час','кВт-ч');
insert into measure (measure, measure_short) values ('гигагерц','ГГц');
insert into measure (measure, measure_short) values ('гигабайт','ГБайт');
insert into measure (measure, measure_short) values ('10000 шт.','10тыс.шт.');
drop table if exists contragent CASCADE;
create table contragent (
contragent_id int GENERATED BY DEFAULT AS IDENTITY NOT NULL PRIMARY KEY
,contragent varchar(255) NULL
,descr text NULL -- comments
,is_provider bool NOT NULL DEFAULT false
,external_uid uuid NULL
,external_code varchar(255) NULL --WZ
,dt_created timestamptz NOT NULL default CURRENT_TIMESTAMP -- время записи по часам сервера БД
,creator_id int NULL -- идентификатор пользователя, создавшего запись
,dt_updated timestamptz NOT NULL default CURRENT_TIMESTAMP
,updater_id int NULL -- идентификатор пользователя, обновившего запись
);
ALTER TABLE contragent OWNER TO dbo;
-- данные для тестирования
insert into contragent (contragent, is_provider) values ('NUBES', true); -- предполагается, что провайдер только один, но это не поддерживается ограничениями
insert into contragent (contragent) values
('Рога и Копыта ООО')
,('Лютик ЗАО')
;
drop table if exists contract CASCADE;
create table contract (
contract_id int GENERATED BY DEFAULT AS IDENTITY NOT NULL PRIMARY KEY
,contragent_id int NOT NULL
,contract varchar(255) NULL -- номер контракта
,dt_contract timestamptz NOT NULL
,is_closed bool NOT NULL default false
,dt_closed timestamptz NULL -- дата завершения контракта
,descr text NULL -- comments
,dt_created timestamptz NOT NULL default CURRENT_TIMESTAMP --
,creator_id int NULL -- идентификатор пользователя, создавшего запись
,dt_updated timestamptz NOT NULL default CURRENT_TIMESTAMP --
,updater_id int NULL -- идентификатор пользователя, обновившего запись
);
ALTER TABLE contract OWNER TO dbo;
insert into contract (contragent_id,contract,dt_contract) values (2,'test',CURRENT_TIMESTAMP);
-- соглашение обеспечивает явную прикладную версионность
drop table if exists agreement CASCADE;
create table agreement (
--agreement_id int GENERATED BY DEFAULT AS IDENTITY NOT NULL PRIMARY KEY
--,
contract_id int NOT NULL
,agreement_version int NOT NULL -- именование построено не так, как для версии строки спецификации
,agreement varchar(255) NULL -- название соглашения
,dt_agreement timestamptz NOT NULL -- формальная дата, не связана с версионностью (может быть, порядок)
,is_actual boolean NOT NULL -- считаем, что на договор 1 действующее соглашение - которые до него, те устарели, которые после, те в проекте
,descr text NULL
,dt_created timestamptz NOT NULL default CURRENT_TIMESTAMP --
,creator_id int NULL -- идентификатор пользователя, создавшего запись
,dt_updated timestamptz NOT NULL default CURRENT_TIMESTAMP --
,updater_id int NULL -- идентификатор пользователя, обновившего запись
,CONSTRAINT PK_agreement PRIMARY KEY (contract_id, agreement_version)
);
ALTER TABLE agreement OWNER TO dbo;
insert into agreement (contract_id,agreement_version,dt_agreement,is_actual) values (1,0,CURRENT_TIMESTAMP,true);
-- шапка спецификации, не версионная (не темпоральная)
drop table if exists specification CASCADE;
create table specification (
specification_id int GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY NOT NULL
,specification varchar(255) NOT NULL
,contract_id int NOT NULL
,descr text NULL
,creator_id int NULL
,updater_id int NULL
,dt_created timestamp NOT NULL default CURRENT_TIMESTAMP -- дата записи
,dt_updated timestamp NOT NULL default CURRENT_TIMESTAMP -- дата последней модификации
);
ALTER TABLE specification OWNER TO dbo;
insert into specification (specification,contract_id) values ('first spec',1);
-- на соглашение должна быть одна актуальная версия спецификации
-- может, она не очень-то и нужна, у нее полей-то только описание, а оно не очень нужно, а ключ составной и распространяется дальше
-- и правда, она просто не используется
drop table if exists specification_version CASCADE;
/*
create table specification_version (
specification_id int
,agreement_version int NOT NULL -- FK agreement
,descr text NULL
,creator_id int NULL
,updater_id int NULL
,dt_created timestamp NOT NULL default CURRENT_TIMESTAMP -- дата записи
,dt_updated timestamp NOT NULL default CURRENT_TIMESTAMP -- дата последней модификации
,CONSTRAINT PK_specification_version PRIMARY KEY (specification_id, agreement_version)
);
ALTER TABLE specification_version OWNER TO dbo;
*/
-- строка спецификации
drop table if exists specification_item CASCADE;
create table specification_item (
specification_item_uid uuid NOT NULL PRIMARY KEY DEFAULT gen_random_uuid() -- ключ строки
,specification_id int NOT NULL --FK
,svc_id int NOT NULL --immutable
,creator_id int NULL
,updater_id int NULL
,dt_created timestamp NOT NULL default CURRENT_TIMESTAMP -- дата записи
,dt_updated timestamp NOT NULL default CURRENT_TIMESTAMP -- дата последней модификации
);
ALTER TABLE specification_item OWNER TO dbo;
-- версия строки спецификации (версионность берется от спеки)
drop table if exists specification_item_version CASCADE;
create table specification_item_version (
specification_item_uid uuid NOT NULL -- ключ строки
,agreement_version int NOT NULL -- ВАЖНО: если строка не редактировалась - версия будет старой (экономим версий, *** но можно сделать таблицу, собирающую версии строк)
,dt_from timestamptz NULL
,dt_to timestamptz NULL
,specification_item_version varchar(1023) NOT NULL -- имя для печати
,quantity decimal(15,4) NULL
,price decimal(15,4) NULL
,creator_id int NULL
,updater_id int NULL
,dt_created timestamp NOT NULL default CURRENT_TIMESTAMP -- дата записи
,dt_updated timestamp NOT NULL default CURRENT_TIMESTAMP -- дата последней модификации
,CONSTRAINT PK_specification_item_version PRIMARY KEY (specification_item_uid, agreement_version)
);
ALTER TABLE specification_item OWNER TO dbo;
-- параметр (компонент) собственной версионности не имеет, при создании новой версии строки клонируется
drop table if exists specification_item_param CASCADE;
create table specification_item_param (
specification_item_param_id int GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY NOT NULL
,specification_item_uid uuid NOT NULL
,agreement_version int NOT NULL
,service_param_id int NOT NULL
,quantity decimal(15,4) NULL
,price decimal(15,4) NULL
,creator_id int NULL
,updater_id int NULL
,dt_created timestamp NOT NULL default CURRENT_TIMESTAMP -- дата записи
,dt_updated timestamp NOT NULL default CURRENT_TIMESTAMP -- дата последней модификации
);
ALTER TABLE specification_item_param OWNER TO dbo;
drop table if exists svc CASCADE;
CREATE TABLE svc (
svc_id integer NOT NULL,
svc character varying(255),
descr text,
dt_created timestamp with time zone DEFAULT CURRENT_TIMESTAMP NOT NULL,
creator_id integer,
dt_updated timestamp with time zone DEFAULT CURRENT_TIMESTAMP NOT NULL,
updater_id integer,
is_production_ready boolean DEFAULT false NOT NULL,
code character varying(255),
man text,
svc_short character varying(255),
resource_realm_type_id integer,
version character varying(255),
orchestrator_name character varying(255),
sort integer
);
ALTER TABLE svc OWNER TO dbo;
INSERT INTO svc VALUES (92, 'k8s_mongodb', '', '2024-09-09 12:53:00.022+03', 3, '2024-09-09 12:53:00.022+03', 3, false, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
INSERT INTO svc VALUES (95, 'NodeJS - сервер приложений', 'Образ: node:16', '2024-12-10 17:57:41.06+03', 3, '2025-03-07 18:12:53.508+03', 3, true, '', 'Образ: node:16', 'nodejs', 3, '0.0.6', 'Node', NULL);
INSERT INTO svc VALUES (50, 'Nextcloud - платформа совместной работы', 'Ресурсная платформа: k8s. Автоматизация: helm chart', '2024-09-09 12:51:27.551+03', 3, '2025-02-28 18:11:26.017+03', 3, true, '', 'Ресурсная платформа: k8s. Автоматизация: helm chart', 'nextcloud', 3, '0.0.3', 'Nextcloud', NULL);
INSERT INTO svc VALUES (21, 'Виртуальный ДЦ для VM (vc_vdc)', 'Виртуальный ДЦ в Cloud Director. Требует наличие Организации', '2024-04-08 10:59:07.350806+03', NULL, '2025-02-12 15:42:07.821+03', 10, false, '', 'Виртуальный ДЦ в Cloud Director. Требует наличие Организации', '', NULL, NULL, NULL, NULL);
INSERT INTO svc VALUES (26, 'vApp для VM (vc_vapp)', 'Папка в клауд директоре. Для установки нужен vc_nsxt', '2024-12-23 14:54:46.277+03', 3, '2025-02-12 15:42:46.017+03', 10, false, '', 'Папка в клауд директоре. Для установки нужен vc_nsxt', '', NULL, NULL, NULL, NULL);
INSERT INTO svc VALUES (111, 'DNS-запись', '', '2024-09-17 14:22:05.028+03', 11, '2025-02-28 16:45:10.351+03', 3, true, '', '', 'dnsrecord', 4, '0.0.4', 'Records', NULL);
INSERT INTO svc VALUES (13, 'S3 бакет (s3_bucket)', 'Требует наличия учетной записм S3
Ресурсная платформа: Ceph', '2024-12-11 23:19:43.469+03', 3, '2025-02-28 16:43:49.758+03', 3, true, '', 'Требует наличия учетной записм S3
Ресурсная платформа: Ceph', 's3bucket', 1, '0.0.3', 'Bucket', NULL);
INSERT INTO svc VALUES (20, 'Организация для VM в Cloud Director (vc_organization)', 'Организация в клауд директоре', '2024-04-08 10:59:07.350806+03', NULL, '2025-02-12 15:41:57.046+03', 10, false, '', 'Организация в клауд директоре', '', NULL, NULL, NULL, NULL);
INSERT INTO svc VALUES (12, 'S3 - учетная запись', 'S3 account, ресурсная платформа CEPH (S3 CEPH). Настроен сбор метрик, автоматизация биллинга в разработке', '2024-04-08 10:59:07.350806+03', NULL, '2025-02-28 16:42:41.829+03', 3, true, '', 'S3 account, ресурсная платформа CEPH (S3 CEPH). Настроен сбор метрик, автоматизация биллинга в разработке', 's3', 1, '1.0.0', 'Ceph', NULL);
INSERT INTO svc VALUES (32, 'PostgreSQL на ВМ (vc_vm_postgresql_std)', 'Сервис настройки PostgreSQL для виртуальной машины.
Требует наличия ВМ
Версия Postgre - 17', '2024-08-05 12:47:46.275+03', 3, '2025-02-12 15:42:55.441+03', 10, false, '', 'Сервис настройки PostgreSQL для виртуальной машины.
Требует наличия ВМ
Версия Postgre - 17', '', NULL, NULL, NULL, NULL);
INSERT INTO svc VALUES (100, 'tenantOpenwhisk', 'Добавление и удаления пользователя для работы с Openwhisk', '2024-09-12 13:43:55.166+03', 3, '2024-12-26 13:06:02.166+03', 3, false, '', 'Добавление и удаления пользователя для работы с Openwhisk', NULL, NULL, NULL, NULL, NULL);
INSERT INTO svc VALUES (25, 'Внешний IP адрес для VM (vc_external_ip)', 'Создание external Ip в Cloud Director.
Требует наличие услуги', '2024-12-12 16:32:45.488+03', 3, '2025-02-28 16:47:42.541+03', 3, true, '', 'Создание external Ip в Cloud Director.
Требует наличие услуги', 'vcexternalip', 2, '0.0.2', 'Ip', NULL);
INSERT INTO svc VALUES (96, 'pgAdmin - консоль для PostgreSQL', '', '2024-12-10 18:28:43.874+03', 3, '2025-02-28 17:48:10.242+03', 3, true, '', '', 'pgadmin', 3, '0.0.2', 'Pgadmin', NULL);
INSERT INTO svc VALUES (110, 'DNS-зона', '', '2024-09-16 18:52:52.357+03', 11, '2025-02-28 16:45:17.753+03', 3, true, '', '', 'dnszone', 4, '0.0.3', 'Zones', NULL);
INSERT INTO svc VALUES (99, 'k8s_gitea', '', '2025-02-28 17:18:32.548+03', 3, '2025-02-28 17:43:41.652+03', 3, true, '', '', '', 3, '0.0.1', 'Gitea', NULL);
INSERT INTO svc VALUES (82, 'Harbor Registry (registry_k8s)', 'Harbor Registry. Ресурсная платформа: k8s. Автоматизация: helm chart. Авторизация: keycloak', '2024-09-09 12:52:04.345+03', 3, '2025-02-28 18:09:50.071+03', 3, true, '', 'Harbor Registry. Ресурсная платформа: k8s. Автоматизация: helm chart. Авторизация: keycloak', 'harbor', 3, '0.0.2', 'Registry', NULL);
INSERT INTO svc VALUES (2, 'k8sTemplate', '', '2025-02-28 17:06:21.371+03', 3, '2025-02-28 17:06:48.617+03', 3, false, '', '', '', 3, '0.0.1', 'Template', NULL);
INSERT INTO svc VALUES (23, 'VM в Cloud Director (vc_vm)', 'Виртуальная машина без каких-либо особенностей.
Данная услуга запускает vc_ip для выдачи белого адреса и подключения к ВМ', '2024-08-02 12:53:13.869+03', 3, '2025-02-12 15:42:20.771+03', 10, false, '', 'Виртуальная машина без каких-либо особенностей.
Данная услуга запускает vc_ip для выдачи белого адреса и подключения к ВМ', '', NULL, NULL, NULL, NULL);
INSERT INTO svc VALUES (91, 'Redis In-Memory DB Cluster on k8s', 'Redis кластер. Под кеши.
Ресурсная платформа: k8s.
Автоматизация: k8s operator
port 6379', '2024-09-09 12:52:49.473+03', 3, '2025-03-07 11:39:36.69+03', 3, true, '', '', 'redis', 3, '0.0.3', 'Redis', NULL);
INSERT INTO svc VALUES (81, 'Apache Superset - аналитический сервер (superset_k8s)', 'Apache Superset как сервис.
Ресурсная платформа: k8s.
Автоматизация: k8s operator.
Авторизация: 2FA keycloak (для доменного логина @mgmt.nubes.ru)', '2024-09-09 12:51:49.122+03', 3, '2025-02-28 18:09:54.127+03', 3, true, '', 'Apache Superset как сервис.
Ресурсная платформа: k8s.
Автоматизация: k8s operator.
Авторизация: 2FA keycloak (для доменного логина @mgmt.nubes.ru)', 'superset', 3, '0.0.1', 'Superset', NULL);
INSERT INTO svc VALUES (22, 'Сетевые адаптеры для VM (vc_nsxt)', '', '2024-04-08 10:59:07.350806+03', NULL, '2025-02-28 17:19:33.266+03', 3, false, '', '', '', NULL, '', '', NULL);
INSERT INTO svc VALUES (93, 'RabbitMQ - сервер очередей (rabbitmq_k8s)', 'RabbitMQ', '2024-09-09 12:53:09.059+03', 3, '2025-03-07 11:39:29.483+03', 3, true, '', '', 'rabbitmq', 3, '0.0.3', 'Rabbitmq', NULL);
INSERT INTO svc VALUES (90, 'PostgreSQL RDBMS Cluster', 'PostgreSQL кластер. Ресурсная платформа: k8s. Автоматизация: k8s operator.
Автоматическое резервное копирование, ручное восстановление.', '2024-09-09 12:52:34.457+03', 3, '2025-03-12 10:36:06.529+03', 3, true, '', 'PostgreSQL кластер. Ресурсная платформа: k8s. Автоматизация: k8s operator.
Автоматическое резервное копирование, ручное восстановление.', 'postgres', 3, '0.0.5', 'Pgsql', NULL);
INSERT INTO svc VALUES (98, 'k8s_simple_http_container', '', '2025-02-28 17:18:40.813+03', 3, '2025-02-28 17:43:48.248+03', 3, true, '', '', 'http', 3, '0.0.3', 'SimpleHttpContainer', NULL);
INSERT INTO svc VALUES (94, 'Lucee - сервер приложений', 'Образ: lucee/lucee:latest', '2024-12-10 16:53:24.068+03', 3, '2025-03-10 10:13:04.713+03', 3, true, '', 'Образ: lucee/lucee:latest', 'lucee', 3, '0.0.9', 'Lucee', NULL);
INSERT INTO svc VALUES (1, 'dummy service', 'Болванка для тестов', '2024-04-19 19:10:30.206+03', 3, '2025-04-30 19:00:08.473+03', 10, true, '', '', 'dummy', 7, '', 'dummy', NULL);
INSERT INTO svc VALUES (112, 'grafana_tenant', '', '2025-03-12 12:30:15.669+03', 3, '2025-04-28 18:40:23.781+03', 10, false, '', '', 'tenant', 6, '0.0.2', 'Tenant', NULL);
ALTER TABLE ONLY svc
ADD CONSTRAINT PK_svc PRIMARY KEY (svc_id);
-------------------------------------------------------------------------
-- IAM
-------------------------------------------------------------------------
-- usr is normally shared view
drop table if exists usr;
create table usr(
usr_id int GENERATED BY DEFAULT AS IDENTITY(START WITH 11) PRIMARY KEY NOT NULL
,firstname varchar(255) NULL
,middlename varchar(255) NULL
,lastname varchar(255) NOT NULL
,login varchar(255) NOT NULL
,password varchar(255) NULL -- changed from varbinary for postgre and Argon2
,email varchar(255) NOT NULL
,phone_cell varchar(50) NULL
,descr text NULL
,settings text NULL
,locked boolean NOT NULL CONSTRAINT DF_usr_locked DEFAULT(false)
,creator_id int NULL
,updater_id int NULL
,dt_created timestamp NOT NULL default CURRENT_TIMESTAMP -- дата записи
,dt_updated timestamp NOT NULL default CURRENT_TIMESTAMP -- дата последней модификации
,fullname varchar GENERATED ALWAYS AS ((lastname||rtrim(' '||coalesce(firstname,'')))||rtrim(' '||coalesce(middlename,''))) STORED
,shortname varchar GENERATED ALWAYS AS (replace((lastname||rtrim(' '||coalesce(left(firstname,(1))||'.','')))||rtrim(' '||coalesce(left(middlename,(1))||'.','')),' .','')) STORED
);
create unique index UX_login on usr(login);
insert into usr (usr_id,firstname,middlename,lastname,login,password,email,phone_cell)
values (2,'','','Анонимный пользователь','anonymous',null,'',null);
insert into usr (usr_id,firstname,middlename,lastname,login,password,email,phone_cell)
values (10,'Сергей','Юрьевич','Мищук','smishchuk','$argon2id$v=19$m=500,t=3,p=4$d37RBdizC3rwQfINGSoQmg$Bwvr1f+RQf9hpXwV58sgUYzYpupp7iUzfUBACGApT80','msyu@mail.ru',null);
------------------------------
drop table if exists obj;
create table obj ( --
obj varchar(63) NOT NULL PRIMARY KEY
,descr text NULL -- примечания
,creator_id int NULL
,updater_id int NULL
,dt_created timestamp NOT NULL default CURRENT_TIMESTAMP -- дата записи
,dt_updated timestamp NOT NULL default CURRENT_TIMESTAMP -- дата последней модификации
);
drop table if exists role;
create table role ( --
role_id int /*identity*/ NOT NULL PRIMARY KEY
,role varchar(255) NOT NULL
,descr text NULL -- примечания
,creator_id int NULL
,updater_id int NULL
,dt_created timestamp NOT NULL default CURRENT_TIMESTAMP -- дата записи
,dt_updated timestamp NOT NULL default CURRENT_TIMESTAMP -- дата последней модификации
);
insert into role (role_id,role) values (1,'Администратор');
insert into role (role_id,role) values (2,'Читатель'); -- только чтение ограниченного списка экранов
drop table if exists usr_role;
create table usr_role ( --
role_id int NOT NULL
,usr_id int NOT NULL
,CONSTRAINT PK_usr_role primary key (usr_id, role_id)
,creator_id int NULL
,dt_created timestamp NOT NULL default CURRENT_TIMESTAMP -- дата записи
);
insert into usr_role (role_id,usr_id) values (2,2);
insert into usr_role (role_id,usr_id) values (1,10);
drop table if exists acl;
create table acl(
obj varchar(63) NOT NULL
,role_id int NOT NULL
,permission int NOT NULL -- 1=READ 2=WRITE
,creator_id int NULL
,modifier_id int NULL
,dt_created timestamp NOT NULL default CURRENT_TIMESTAMP -- дата записи
,dt_modified timestamp NOT NULL default CURRENT_TIMESTAMP -- дата последней модификации
,CONSTRAINT PK_acl PRIMARY KEY (obj, role_id)
);
/* insert into obj (obj,descr) values ('abstract_service','Абстрактная услуга каталога');
insert into obj (obj,descr) values ('price','Прайс-лист базовый');
insert into obj (obj,descr) values ('service','Услуга (развернутый каталог)');
insert into obj (obj,descr) values ('abstract_service_rpt','Каталог');
insert into obj (obj,descr) values ('price_rpt','Прайс-лист: услуга с параметром');
insert into obj (obj,descr) values ('export','Отчеты экспорта');
insert into obj (obj,descr) values ('modifier_class','Класс характеристики');
insert into obj (obj,descr) values ('modifier','Характеристика');
insert into obj (obj,descr) values ('param_class','Класс параметра');
insert into obj (obj,descr) values ('param','Параметр');
insert into obj (obj,descr) values ('measure','Единица измерения');
insert into obj (obj,descr) values ('site','Тарифная зона');
insert into obj (obj,descr) values ('provider','Поставщик (ДЗО)');
insert into obj (obj,descr) values ('area','Группа каталога');
insert into obj (obj,descr) values ('service_param','Параметр конкретной услуги');
insert into obj (obj,descr) values ('specification','Спецификация');
insert into obj (obj,descr) values ('specification_item','Строка спецификации');
insert into obj (obj,descr) values ('specification_item_param','Ресурс строки спецификации (экземпляра услуги)');
insert into obj (obj,descr) values ('usr','Пользователь');
insert into obj (obj,descr) values ('acl','Права доступа');
insert into obj (obj,descr) values ('service_param_price','Цена компонента');
insert into obj (obj,descr) values ('service_price','Цена услуги');
insert into obj (obj,descr) values ('abstract_service_complementary','Дополнительная услуга'); */
/* --читатель
insert into acl(obj,role_id,permission) values ('abstract_service',2,1);
insert into acl(obj,role_id,permission) values ('price',2,1);
insert into acl(obj,role_id,permission) values ('service',2,1);
insert into acl(obj,role_id,permission) values ('abstract_service_rpt',2,1);
insert into acl(obj,role_id,permission) values ('abstract_service_doc',2,1);
insert into acl(obj,role_id,permission) values ('price_rpt',2,1);
insert into acl(obj,role_id,permission) values ('modifier_class',2,1);
insert into acl(obj,role_id,permission) values ('modifier',2,1);
insert into acl(obj,role_id,permission) values ('param_class',2,1);
insert into acl(obj,role_id,permission) values ('param',2,1);
insert into acl(obj,role_id,permission) values ('measure',2,1);
insert into acl(obj,role_id,permission) values ('site',2,1);
insert into acl(obj,role_id,permission) values ('provider',2,1);
insert into acl(obj,role_id,permission) values ('area',2,1);
insert into acl(obj,role_id,permission) values ('specification',2,1);
insert into acl(obj,role_id,permission) values ('specification_item',2,1);
insert into acl(obj,role_id,permission) values ('specification_item_param',2,1);
insert into acl(obj,role_id,permission) values ('service_param',2,1);
insert into acl(obj,role_id,permission) values ('abstract_service_param_class',2,1);
insert into acl(obj,role_id,permission) values ('service_param_price',2,1);
insert into acl(obj,role_id,permission) values ('service_price',2,1);
insert into acl(obj,role_id,permission) values ('abstract_service_complementary',2,1);
--админ
insert into acl(obj,role_id,permission) values ('abstract_service',1,2);
insert into acl(obj,role_id,permission) values ('price',1,2);
insert into acl(obj,role_id,permission) values ('service',1,2);
insert into acl(obj,role_id,permission) values ('abstract_service_rpt',1,2);
insert into acl(obj,role_id,permission) values ('abstract_service_doc',1,2);
insert into acl(obj,role_id,permission) values ('price_rpt',1,2);
insert into acl(obj,role_id,permission) values ('export',1,2);
insert into acl(obj,role_id,permission) values ('modifier_class',1,2);
insert into acl(obj,role_id,permission) values ('modifier',1,2);
insert into acl(obj,role_id,permission) values ('param_class',1,2);
insert into acl(obj,role_id,permission) values ('param',1,2);
insert into acl(obj,role_id,permission) values ('measure',1,2);
insert into acl(obj,role_id,permission) values ('site',1,2);
insert into acl(obj,role_id,permission) values ('provider',1,2);
insert into acl(obj,role_id,permission) values ('area',1,2);
insert into acl(obj,role_id,permission) values ('specification',1,2);
insert into acl(obj,role_id,permission) values ('specification_item',1,2);
insert into acl(obj,role_id,permission) values ('specification_item_param',1,2);
insert into acl(obj,role_id,permission) values ('usr',1,2);
insert into acl(obj,role_id,permission) values ('acl',1,2);
insert into acl(obj,role_id,permission) values ('service_param',1,2);
insert into acl(obj,role_id,permission) values ('abstract_service_param_class',1,2);
insert into acl(obj,role_id,permission) values ('service_param_price',1,2);
insert into acl(obj,role_id,permission) values ('service_price',1,2);
insert into acl(obj,role_id,permission) values ('abstract_service_complementary',1,2); */