我创建了一个4页的应用程序
回家- Admin页面
- 计算体重指数
- 对
然后是-> shared components -> Select Authorization schema -> Create
我给它设置了一个名字only_admin -> PLSQL boolen expression return (option)
DECLARE
myrole VARCHAR2(10 CHAR);
BEGIN
SELECT role_assigned
INTO myrole
FROM employee
WHERE id = :APP_USER;
IF :myrole = 'ADMIN' THEN
RETURN TRUE;
ELSE
RETURN false;
END;
保存以上代码后,我进入Admin page -> under security -> selected -> only_admin
现在发生的是,甚至用户也可以看到页面。这是不应该发生的
**下面是我的表格:Employee **
NAME,AGE,ID,ROLE_ASSIGNED
Raj,22,12,ADMIN
Deep,24,14,USER
Bob,26,16,USER
我想限制Name: Deep和Bob访问Admin页面,因为他们是USER -> ROLE_ASSIGNED
不是
IF :myrole = 'ADMIN' THEN
,
IF myrole = 'ADMIN' THEN
。myrole
前面没有分号。它不是一个页面条目或类似的东西;它只是一个局部变量。
只是为了完整性是另一种选择,既简单又容易出错。作为授权方案代码,不要使用返回布尔值的"pl/sql函数,而是使用"sql exists"使用以下sql选项:
SELECT 1
FROM employee
WHERE id = :APP_USER
AND myrole = 'ADMIN'
优势:
- 如果user在employee表中没有行,则不会引发异常。
- 如果安全模型允许员工拥有多行,则不需要更改源。