podoc:can_access_folder_sql_function
Database Function Description of "can_access_folder"
Name
can_access_folder
Description
Purpose
Schema
CREATE OR REPLACE FUNCTION can_access_folder(INTEGER, INTEGER, VARCHAR[]) RETURNS BOOLEAN AS ' DECLARE res_id alias for $1; user_id alias for $2; passwd_list alias for $3; res_access integer; owns_id integer; can_access boolean; admin_type boolean; passwd varchar; BEGIN -- 1 == public, 2 == protected, 3 == private -- 1 == diabled, 2 == client, 3 == user, 4 == admin SELECT INTO res_access, owns_id, passwd access_rights, users, password FROM folder WHERE identifier = res_id; IF res_access = 1 THEN RETURN true; END IF; IF owns_id = user_id THEN RETURN true; END IF; SELECT INTO admin_type true FROM users WHERE identifier = user_id AND type = 4; IF admin_type is true THEN RETURN true; END IF; IF res_access = 2 THEN SELECT INTO can_access true FROM folder, calendar WHERE folder.event = calendar.identifier AND calendar.client = user_id; IF can_access is true THEN RETURN true; END IF; select into can_access true WHERE passwd = ANY(passwd_list); IF can_access is true THEN RETURN true; END IF; END IF; return false; END; ' LANGUAGE 'plpgsql';
History
Used first
Version 2.34
Used last
Still in use
Change history
= Version 2.34 =
--- Permission lookup functions! CREATE OR REPLACE FUNCTION can_access_folder(INTEGER, INTEGER, VARCHAR[]) RETURNS BOOLEAN AS ' DECLARE res_id alias for $1; user_id alias for $2; passwd_list alias for $3; res_access integer; owns_id integer; can_access boolean; admin_type boolean; passwd varchar; BEGIN -- 1 == public, 2 == protected, 3 == private -- 1 == diabled, 2 == client, 3 == user, 4 == admin SELECT INTO res_access, owns_id, passwd access_rights, users, password FROM folder WHERE identifier = res_id; IF res_access = 1 THEN RETURN true; END IF; IF owns_id = user_id THEN RETURN true; END IF; SELECT INTO admin_type true FROM users WHERE identifier = user_id AND type = 4; IF admin_type is true THEN RETURN true; END IF; IF res_access = 2 THEN SELECT INTO can_access true FROM folder, calendar WHERE folder.event = calendar.identifier AND calendar.client = user_id; IF can_access is true THEN RETURN true; END IF; select into can_access true WHERE passwd = ANY(passwd_list); IF can_access is true THEN RETURN true; END IF; END IF; return false; END; ' LANGUAGE 'plpgsql';
podoc/can_access_folder_sql_function.txt · Last modified: 2007/10/19 15:11 by Luud