mirror of
https://github.com/ONLYOFFICE/server.git
synced 2026-02-10 18:05:07 +08:00
Feature/multi tenant (#377)
* [feature] Add tenantManager * [fix] Fix export * [schema] Change schema for tenants * [de] For auth * [config] Remove unused secret.browser param to unify with multitenancy * [feature] Add OperationContext to store state of request * [log] Remove docId and userId from log message * [feature] Add OperationContext class * [feature] For logging * [feature] Add content to some methods * [feature] For multitenancy * [feature] For multitenancy * [feature] For multitenancy * [feature] For multitenancy * [feature] For multitenancy * [feature] For multitenancy * [feature] Move all tenant logic to tenantManager * [feature] Fix reading of tenant license * [feature] Move tenant logic to EditorData interface * [feature] Use context in SQL queries * [feature] Refactoring * [feature] Fix editorDataMemory * [feature] Fix before merge
This commit is contained in:
@ -26,6 +26,7 @@ USE onlyoffice;
|
||||
--
|
||||
|
||||
CREATE TABLE IF NOT EXISTS `doc_changes` (
|
||||
`tenant` varchar(255) NOT NULL,
|
||||
`id` varchar(255) NOT NULL,
|
||||
`change_id` int(10) unsigned NOT NULL,
|
||||
`user_id` varchar(255) NOT NULL,
|
||||
@ -33,7 +34,7 @@ CREATE TABLE IF NOT EXISTS `doc_changes` (
|
||||
`user_name` varchar(255) NOT NULL,
|
||||
`change_data` longtext NOT NULL,
|
||||
`change_date` datetime NOT NULL,
|
||||
PRIMARY KEY (`id`,`change_id`)
|
||||
PRIMARY KEY (`tenant`, `id`,`change_id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
||||
|
||||
--
|
||||
@ -48,6 +49,7 @@ CREATE TABLE IF NOT EXISTS `doc_changes` (
|
||||
--
|
||||
|
||||
CREATE TABLE IF NOT EXISTS `task_result` (
|
||||
`tenant` varchar(255) NOT NULL,
|
||||
`id` varchar(255) NOT NULL,
|
||||
`status` tinyint(3) NOT NULL,
|
||||
`status_info` int(10) NOT NULL,
|
||||
@ -59,7 +61,7 @@ CREATE TABLE IF NOT EXISTS `task_result` (
|
||||
`baseurl` text NOT NULL,
|
||||
`password` longtext NULL,
|
||||
`additional` longtext NULL,
|
||||
PRIMARY KEY (`id`)
|
||||
PRIMARY KEY (`tenant`, `id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
||||
|
||||
--
|
||||
|
||||
@ -8,6 +8,7 @@
|
||||
-- Table structure for doc_changes
|
||||
-- ----------------------------
|
||||
CREATE TABLE IF NOT EXISTS "public"."doc_changes" (
|
||||
"tenant" varchar(255) COLLATE "default" NOT NULL,
|
||||
"id" varchar(255) COLLATE "default" NOT NULL,
|
||||
"change_id" int4 NOT NULL,
|
||||
"user_id" varchar(255) COLLATE "default" NOT NULL,
|
||||
@ -15,7 +16,7 @@ CREATE TABLE IF NOT EXISTS "public"."doc_changes" (
|
||||
"user_name" varchar(255) COLLATE "default" NOT NULL,
|
||||
"change_data" text COLLATE "default" NOT NULL,
|
||||
"change_date" timestamp without time zone NOT NULL,
|
||||
PRIMARY KEY ("id", "change_id")
|
||||
PRIMARY KEY ("tenant", "id", "change_id")
|
||||
)
|
||||
WITH (OIDS=FALSE);
|
||||
|
||||
@ -23,6 +24,7 @@ WITH (OIDS=FALSE);
|
||||
-- Table structure for task_result
|
||||
-- ----------------------------
|
||||
CREATE TABLE IF NOT EXISTS "public"."task_result" (
|
||||
"tenant" varchar(255) COLLATE "default" NOT NULL,
|
||||
"id" varchar(255) COLLATE "default" NOT NULL,
|
||||
"status" int2 NOT NULL,
|
||||
"status_info" int4 NOT NULL,
|
||||
@ -34,11 +36,11 @@ CREATE TABLE IF NOT EXISTS "public"."task_result" (
|
||||
"baseurl" text COLLATE "default" NOT NULL,
|
||||
"password" text COLLATE "default" NULL,
|
||||
"additional" text COLLATE "default" NULL,
|
||||
PRIMARY KEY ("id")
|
||||
PRIMARY KEY ("tenant", "id")
|
||||
)
|
||||
WITH (OIDS=FALSE);
|
||||
|
||||
CREATE OR REPLACE FUNCTION merge_db(_id varchar(255), _status int2, _status_info int4, _last_open_date timestamp without time zone, _user_index int4, _change_id int4, _callback text, _baseurl text, OUT isupdate char(5), OUT userindex int4) AS
|
||||
CREATE OR REPLACE FUNCTION merge_db(_tetant varchar(255), _id varchar(255), _status int2, _status_info int4, _last_open_date timestamp without time zone, _user_index int4, _change_id int4, _callback text, _baseurl text, OUT isupdate char(5), OUT userindex int4) AS
|
||||
$$
|
||||
DECLARE
|
||||
t_var "public"."task_result"."user_index"%TYPE;
|
||||
@ -47,9 +49,9 @@ BEGIN
|
||||
-- first try to update the key
|
||||
-- note that "a" must be unique
|
||||
IF ((_callback <> '') IS TRUE) AND ((_baseurl <> '') IS TRUE) THEN
|
||||
UPDATE "public"."task_result" SET last_open_date=_last_open_date, user_index=user_index+1,callback=_callback,baseurl=_baseurl WHERE id = _id RETURNING user_index into userindex;
|
||||
UPDATE "public"."task_result" SET last_open_date=_last_open_date, user_index=user_index+1,callback=_callback,baseurl=_baseurl WHERE tenant = _tetant AND id = _id RETURNING user_index into userindex;
|
||||
ELSE
|
||||
UPDATE "public"."task_result" SET last_open_date=_last_open_date, user_index=user_index+1 WHERE id = _id RETURNING user_index into userindex;
|
||||
UPDATE "public"."task_result" SET last_open_date=_last_open_date, user_index=user_index+1 WHERE tenant = _tetant AND id = _id RETURNING user_index into userindex;
|
||||
END IF;
|
||||
IF found THEN
|
||||
isupdate := 'true';
|
||||
@ -59,7 +61,7 @@ BEGIN
|
||||
-- if someone else inserts the same key concurrently,
|
||||
-- we could get a unique-key failure
|
||||
BEGIN
|
||||
INSERT INTO "public"."task_result"(id, status, status_info, last_open_date, user_index, change_id, callback, baseurl) VALUES(_id, _status, _status_info, _last_open_date, _user_index, _change_id, _callback, _baseurl) RETURNING user_index into userindex;
|
||||
INSERT INTO "public"."task_result"(id, status, status_info, last_open_date, user_index, change_id, callback, baseurl) VALUES(_tetant, _id, _status, _status_info, _last_open_date, _user_index, _change_id, _callback, _baseurl) RETURNING user_index into userindex;
|
||||
isupdate := 'false';
|
||||
RETURN;
|
||||
EXCEPTION WHEN unique_violation THEN
|
||||
|
||||
Reference in New Issue
Block a user