1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
| "CREATE PROCEDURE NX_ACCESS_ALLOWED2 "
+ " (IN NID VARCHAR(4000), IN USERS VARCHAR(4000), IN PERMS VARCHAR(4000), OUT GR INTEGER) "
+ " READS SQL DATA "
+ " BEGIN "
+ " DECLARE ALLUSERS VARCHAR(4000); "
+ " DECLARE ALLPERMS VARCHAR(4000); "
+ " DECLARE FIRST INTEGER; "
+ " DECLARE CURID VARCHAR(4000); "
+ " DECLARE NEWID VARCHAR(4000); "
+ " DECLARE PE VARCHAR(4000); "
+ " DECLARE US VARCHAR(4000); "
+ " DECLARE v_sqlstatus INTEGER DEFAULT 0; "
+ " SET ALLUSERS = '%' || USERS || '%'; "
+ " SET ALLPERMS = '%' || PERMS || '%'; "
+ " SET FIRST = 1; "
+ " SET CURID = NID; "
+ " WHILE CURID IS NOT NULL DO "
+ " BEGIN "
+ " DECLARE CC CURSOR FOR SELECT PERMISSION, GRANT, USER "
+ " FROM ACLS WHERE ACLS.ID = CURID ORDER BY POS; "
+ " DECLARE CONTINUE HANDLER FOR NOT FOUND SET v_sqlstatus = -1; "
+ " OPEN CC; "
+ " FETCH FROM CC INTO GR, PE, US; "
+ " WHILE 0 = v_sqlstatus DO "
+ " IF ALLUSERS LIKE ('%' || US || '%') AND ALLPERMS LIKE ('%' || PE || '%') THEN "
+ " SET GR = 1; "
+ " GOTO EXIT; "
// + " FETCH FROM CC INTO GR, PE, US; "
+ " END IF; "
+ " END WHILE; "
+ " CLOSE CC; "
+ " END; "
+ " SET NEWID = (SELECT PARENTID FROM HIERARCHY WHERE HIERARCHY.ID = CURID); "
+ " IF FIRST = 1 AND NEWID IS NULL THEN "
+ " SET NEWID = (SELECT VERSIONABLEID FROM VERSIONS WHERE VERSIONS.ID = CURID); "
+ " SET FIRST = 0; "
+ " SET CURID = NEWID; "
+ " END IF; "
+ " END WHILE; "
+ " SET GR = 0; "
+ " EXIT: SET GR = 1; "
+ " END ")); |
Partager