【问题标题】:How to hide pages based on a custom authentication如何基于自定义身份验证隐藏页面
【发布时间】:2019-03-28 20:54:32
【问题描述】:

我有一个自定义身份验证,我将根据 2 个表(员工表和雇主表)将其放入下面的代码部分。当雇主登录时,他们可以看到他们的银行详细信息和所有员工报告的列表。当员工登录时,我希望隐藏雇主银行详细信息页面,并隐藏所有员工页面的列表,我希望显示员工的详细信息页面。我根本不知道该怎么做。我发现的最接近的东西是自定义授权方案,但这需要数据库管理员必须手动授予用户权限。

重要提示)我作为数据库管理员不希望必须手动授予某些用户权限。雇主和雇员将创建自己的帐户,并根据他们是雇主还是雇员(身份验证方案应该这样做)显示适当的页面。 (所以是的,员工可以在开户时谎称自己是雇主,但忽略这一点)

另一个注意事项)请忽略密码以纯文本形式存储的事实,这是一个家庭作业问题,尚未教授加密。

function authenticate( p_username varchar2, p_password varchar2 ) return boolean is  
begin  
  return(  
     Table1Authenticate( p_username, p_password )  
     or  
     Table2Authenticate( p_username, p_password )  
   );  
end; 


create or replace function Table1Authenticate( p_username varchar2, p_password varchar2 ) return boolean is  
   i integer;  
begin  
   select  
      1 into i  
  from employer  
  where upper(employer.username) = upper(p_username)  
  and   upper(employer.passwords) = upper(p_password);  
  return( true );  
exception when NO_DATA_FOUND then  
  return( false );  
end;

create or replace function Table2Authenticate( p_username varchar2, p_password varchar2 ) return boolean is  
   i integer;  
begin  
   select  
      1 into i  
  from employee
  where upper(employee.username) = upper(p_username)  
  and   upper(employee.password) = upper(p_password);  
  return( true );  
exception when NO_DATA_FOUND then  
  return( false );  
end;

【问题讨论】:

    标签: sql oracle oracle-apex


    【解决方案1】:

    在 Oracle Apex 中,您可以使用 Page > Security > Authorization Scheme 限制页面访问。您可以在Shared Components > Authorization Schemes 中创建返回布尔值的自定义函数作为自定义授权方案,并在所需页面中使用。希望对你有帮助。

    【讨论】:

    • 嗨,我不知道如何使函数返回布尔值,因为我复制了上面的身份验证方案,形成了一个网站并将其更改为适合我的表格。我也尝试过进行存在授权,但似乎这仍然允许员工点击雇主页面,但他们会弹出一个错误,拒绝他们访问此页面。而不是这个,我希望整个页面隐藏在导航栏中,这样他们甚至看不到它或点击它。
    • 嗨,现在您的要求很明确了。要从导航栏中隐藏雇主/雇员,请转到特定的Shared Components > Navigation Bar List > Select List Entry > Conditions,您可以选择适合您要求的条件,然后在Expression1 中输入要执行的操作。例如,您可以选择PLSQL Function Returning boolean 作为条件并将您的函数复制到Expression 1。所以基于布尔返回,菜单会出现/消失。希望这会有所帮助。
    【解决方案2】:

    正如对similar question 的回复中类似讨论的那样,您将定义适合每种用户类型的页面,并使用授权方案保护这些页面和指向它们的链接。

    您可以授权用户维护一组记录,以确定每个用户的访问类型,并相应地限制对该页面的访问。这样 DBA 就可以专注于保持硬性旋转(这是个笑话)。

    不是身份验证问题。一旦你进入,这是一个特权问题。

    类比:我可以登录我的银行吗?当然。当我到达那里时我能做什么——只有任何客户可以做的,只有他们的账户。这分别是身份验证、特权和行级安全性。

    【讨论】:

      【解决方案3】:

      我认为最好让您正在执行的身份验证触发动态操作,然后隐藏雇主银行详细信息表。 也许将身份验证设置为隐藏项目(雇主或员工)并根据项目的值设置动态操作。 为了更安全一点,将动态操作设置为如果雇主,true:显示表雇主银行详细信息,false:隐藏表雇主银行详细信息,并且仅在加载时执行错误操作。 这应该有希望工作

      编辑:该死,我猜我没有很好地阅读这个问题。我在想你想要一页上的表格。所以没关系

      【讨论】:

      • 不要使用动态操作来保护页面上的组件,否则可以使用客户端上基于浏览器的工具来反转这些操作。改用服务器端条件,或分配授权方案。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-09-03
      • 2023-01-26
      • 2017-08-26
      • 2017-03-10
      • 1970-01-01
      • 1970-01-01
      • 2015-11-12
      相关资源
      最近更新 更多