HEX
Server: Apache/2.4.63 (Unix)
System: Linux TOMS-220NAS 4.4.302+ #86009 SMP Wed Nov 26 18:19:17 CST 2025 x86_64
User: flavio87 (1026)
PHP: 8.3.27
Disabled: NONE
Upload Files
File: //proc/25636/root/var/packages/CMS/scripts/sql/create_gpo_view.sql
DROP VIEW IF EXISTS policy;
CREATE VIEW IF NOT EXISTS policy AS
SELECT
  gpo.id,
  gpo.name,
  gpo.desc,

  gpo.mtime,

  gpo.extra_info,

  gpo.setting,

  (COALESCE(ds.id, ou.id) NOT NULL) AS linked,

  CASE WHEN (COALESCE(ds.id, ou.id) NOT NULL)
       THEN gpo.parent_type
       ELSE NULL
  END AS parent_type,

  CASE WHEN (COALESCE(ds.id, ou.id) NOT NULL)
       THEN gpo.parent_id
       ELSE NULL
  END AS parent_id,

  COALESCE(ds.hostname, ou.name) AS parent_name

FROM gpo

LEFT JOIN ds
  ON
    gpo.parent_type=1 AND
    gpo.parent_id=ds.id AND
    EXISTS(SELECT * FROM ds_linked_gpo_id
           WHERE ds_id=ds.id AND linked_gpo_id=gpo.id)

LEFT JOIN ou
  ON
    gpo.parent_type=2 AND
    gpo.parent_id=ou.id AND
    EXISTS(SELECT * FROM ou_linked_gpo_id
           WHERE ou_id=ou.id AND linked_gpo_id=gpo.id)
;

DROP VIEW IF EXISTS gpo_do_it_later;
CREATE VIEW IF NOT EXISTS gpo_do_it_later AS
SELECT * FROM policy
WHERE linked=0
;

-- There are the polies delegated directly. If you want to get all policies delegated
-- directly and propagately, you should select by delegated_policy.
DROP VIEW IF EXISTS directly_delegated_policy;
CREATE VIEW IF NOT EXISTS directly_delegated_policy AS
SELECT p.*, d.user_type, d.ugid
FROM
  policy AS p INNER JOIN
  delegate AS d ON
    p.parent_type=d.target_type AND
    p.parent_id=d.target_id
;

-- All policies including delegated directly and propagately.
--
--             ┌-> Server <----------------[1]---┐
-- User -------┼-> Group <-----------------[2]---┼-------- Policy
--             └-> Group -----> Server <---[3]---┘
--      delegate          has                     apply
DROP VIEW IF EXISTS delegated_policy;
CREATE VIEW IF NOT EXISTS delegated_policy AS
-- Select [1] and [2]
SELECT * FROM directly_delegated_policy
UNION
-- Select [3]
SELECT
  policy.*,
  delegate.user_type,
  delegate.ugid
FROM
  policy
  -- Find [1] and [3]
  INNER JOIN ds ON policy.parent_type=1 AND policy.parent_id=ds.id
  -- Use delegated group to filter for [3]
  INNER JOIN delegate ON delegate.target_type=2 AND delegate.target_id=ds.parent_id
;

DROP VIEW IF EXISTS ou_linked_gpo_id;
CREATE VIEW IF NOT EXISTS ou_linked_gpo_id AS
SELECT ou.id AS ou_id, json_extract(json_each.value, "$.id") AS linked_gpo_id
FROM
  ou LEFT JOIN
  json_each(ou.linked_gpo, "$.order")
WHERE json_valid(ou.linked_gpo)
;

DROP VIEW IF EXISTS ds_linked_gpo_id;
CREATE VIEW IF NOT EXISTS ds_linked_gpo_id AS
SELECT ds.id AS ds_id, json_extract(json_each.value, "$.id") AS linked_gpo_id
FROM
  ds LEFT JOIN
  json_each(ds.linked_gpo, "$.order")
WHERE json_valid(ds.linked_gpo)
;