def self.all_group_permissions
all_perms = {}
ActiveRecord::Base.connection.
- exec_query("SELECT user_uuid, target_owner_uuid, perm_level, trashed
+ exec_query("SELECT user_uuid, target_owner_uuid, perm_level
FROM #{PERMISSION_VIEW}
WHERE target_owner_uuid IS NOT NULL",
# "name" arg is a query label that appears in logs:
"all_group_permissions",
- ).rows.each do |user_uuid, group_uuid, max_p_val, trashed|
+ ).rows.each do |user_uuid, group_uuid, max_p_val|
all_perms[user_uuid] ||= {}
all_perms[user_uuid][group_uuid] = PERMS_FOR_VAL[max_p_val.to_i]
end
def group_permissions
group_perms = {self.uuid => {:read => true, :write => true, :manage => true}}
ActiveRecord::Base.connection.
- exec_query("SELECT target_owner_uuid, perm_level, trashed
+ exec_query("SELECT target_owner_uuid, perm_level
FROM #{PERMISSION_VIEW}
WHERE user_uuid = $1
AND target_owner_uuid IS NOT NULL",
"group_permissions for #{uuid}",
# "binds" arg is an array of [col_id, value] for '$1' vars:
[[nil, uuid]],
- ).rows.each do |group_uuid, max_p_val, trashed|
+ ).rows.each do |group_uuid, max_p_val|
group_perms[group_uuid] = PERMS_FOR_VAL[max_p_val.to_i]
end
group_perms
t.string :target_uuid
t.integer :perm_level
t.string :target_owner_uuid
- t.integer :trashed
end
ActiveRecord::Base.connection.execute %{
returns table(user_uuid character varying (27),
target_uuid character varying (27),
perm_level smallint,
- target_owner_uuid character varying(27),
- trashed smallint)
+ target_owner_uuid character varying(27))
VOLATILE
language SQL
as $$
WITH RECURSIVE perm_value(name, val) AS (
VALUES ('can_read'::text,(1)::smallint), ('can_login'::text,1), ('can_write'::text,2), ('can_manage'::text,3)
- ), perm_edges(tail_uuid, head_uuid, val, follow, trashed) AS (
+ ), perm_edges(tail_uuid, head_uuid, val, follow) AS (
SELECT links.tail_uuid,
links.head_uuid,
pv.val,
- ((pv.val = 3) OR (groups.uuid IS NOT NULL)) AS follow,
- (0)::smallint AS trashed,
- (0)::smallint AS followtrash
+ ((pv.val = 3) OR (groups.uuid IS NOT NULL)) AS follow
FROM ((public.links
LEFT JOIN perm_value pv ON ((pv.name = (links.name)::text)))
LEFT JOIN public.groups ON (((pv.val < 3) AND ((groups.uuid)::text = (links.head_uuid)::text))))
SELECT groups.owner_uuid,
groups.uuid,
3,
- true AS bool,
- CASE
- WHEN ((groups.trash_at IS NOT NULL) AND (groups.trash_at < clock_timestamp())) THEN 1
- ELSE 0
- END AS "case",
- 1
+ true AS bool
FROM public.groups
- ), perm(val, follow, user_uuid, target_uuid, trashed) AS (
+ ), perm(val, follow, user_uuid, target_uuid) AS (
SELECT (3)::smallint AS val,
true AS follow,
(users.uuid)::character varying(32) AS user_uuid,
- (users.uuid)::character varying(32) AS target_uuid,
- (0)::smallint AS trashed
+ (users.uuid)::character varying(32) AS target_uuid
FROM public.users
UNION
SELECT (LEAST((perm_1.val)::integer, edges.val))::smallint AS val,
edges.follow,
perm_1.user_uuid,
- (edges.head_uuid)::character varying(32) AS target_uuid,
- ((GREATEST((perm_1.trashed)::integer, edges.trashed) * edges.followtrash))::smallint AS trashed
+ (edges.head_uuid)::character varying(32) AS target_uuid
FROM (perm perm_1
JOIN perm_edges edges ON ((perm_1.follow AND ((edges.tail_uuid)::text = (perm_1.target_uuid)::text))))
)
CASE perm.follow
WHEN true THEN perm.target_uuid
ELSE NULL::character varying
- END AS target_owner_uuid,
- max(perm.trashed) AS trashed
+ END AS target_owner_uuid
FROM perm
GROUP BY perm.user_uuid, perm.target_uuid,
CASE perm.follow