[MM-61756] Attribute Based Access Control - Phase 1 (#30785)

Attribute Based Access Control - Base
* MM-63662

* MM-63919

* MM-63954

* MM-63955 

* MM-63425

* MM-63426

* MM-63458

* MM-63459

* MM-63603

* MM-63845

* MM-64146

* MM-64199

* MM-64201

* MM-64233

* MM-64247

* MM-64268

---------

Co-authored-by: Harshil Sharma <harshilsharma63@gmail.com>
Co-authored-by: Pablo Andrés Vélez Vidal <pablovv2012@gmail.com>
Co-authored-by: abhijit-singh <abhijitsingh0702@gmail.com>
Co-authored-by: Harrison Healey <harrisonmhealey@gmail.com>
Этот коммит содержится в:
Ibrahim Serdar Acikgoz
2025-05-15 11:33:08 +02:00
коммит произвёл GitHub
родитель 4b445cbf16
Коммит a344b3225b
156 изменённых файлов: 14382 добавлений и 621 удалений

Просмотреть файл

@@ -267,6 +267,8 @@ channels/db/migrations/mysql/000134_create_access_control_policies.down.sql
channels/db/migrations/mysql/000134_create_access_control_policies.up.sql
channels/db/migrations/mysql/000135_sidebarchannels_categoryid.down.sql
channels/db/migrations/mysql/000135_sidebarchannels_categoryid.up.sql
channels/db/migrations/mysql/000136_create_attribute_view.down.sql
channels/db/migrations/mysql/000136_create_attribute_view.up.sql
channels/db/migrations/postgres/000001_create_teams.down.sql
channels/db/migrations/postgres/000001_create_teams.up.sql
channels/db/migrations/postgres/000002_create_team_members.down.sql
@@ -535,3 +537,5 @@ channels/db/migrations/postgres/000134_create_access_control_policies.down.sql
channels/db/migrations/postgres/000134_create_access_control_policies.up.sql
channels/db/migrations/postgres/000135_sidebarchannels_categoryid.down.sql
channels/db/migrations/postgres/000135_sidebarchannels_categoryid.up.sql
channels/db/migrations/postgres/000136_create_attribute_view.down.sql
channels/db/migrations/postgres/000136_create_attribute_view.up.sql

Просмотреть файл

@@ -0,0 +1 @@
DROP VIEW IF EXISTS AttributeView;

Просмотреть файл

@@ -0,0 +1,11 @@
CREATE OR REPLACE VIEW AttributeView AS
SELECT
pv.GroupID,
pv.TargetID,
pv.TargetType,
JSON_OBJECTAGG(pf.Name, pv.Value)
AS Attributes
FROM PropertyValues pv
LEFT JOIN PropertyFields pf ON pf.ID = pv.FieldID
GROUP BY GroupID, TargetID, TargetType;

Просмотреть файл

@@ -0,0 +1 @@
DROP MATERIALIZED VIEW IF EXISTS AttributeView;

Просмотреть файл

@@ -0,0 +1,37 @@
CREATE OR REPLACE PROCEDURE create_attribute_view()
LANGUAGE plpgsql
AS $$
BEGIN
EXECUTE '
CREATE MATERIALIZED VIEW IF NOT EXISTS AttributeView AS
SELECT
pv.GroupID,
pv.TargetID,
pv.TargetType,
jsonb_object_agg(
pf.Name,
CASE
WHEN pf.Type = ''select'' THEN (
SELECT to_jsonb(options.name)
FROM jsonb_to_recordset(pf.Attrs->''options'') AS options(id text, name text)
WHERE options.id = pv.Value #>> ''{}''
LIMIT 1
)
WHEN pf.Type = ''multiselect'' THEN (
SELECT jsonb_agg(option_names.name)
FROM jsonb_array_elements_text(pv.Value) AS option_id
JOIN jsonb_to_recordset(pf.Attrs->''options'') AS option_names(id text, name text)
ON option_id = option_names.id
)
ELSE pv.Value
END
) AS Attributes FROM PropertyValues pv
LEFT JOIN PropertyFields pf ON pf.ID = pv.FieldID
WHERE pv.DeleteAt = 0 OR pv.DeleteAt IS NULL
GROUP BY pv.GroupID, pv.TargetID, pv.TargetType
';
END;
$$;
call create_attribute_view();
DROP PROCEDURE create_attribute_view();