gpt4 book ai didi

jsf - 如何正确使用 isUserInRole(role)

转载 作者:行者123 更新时间:2023-12-03 21:08:35 25 4
gpt4 key购买 nike

防止用户角色执行操作。

  • 示例 1:角色“管理员”
    是唯一允许扮演的角色
    破坏行动。
  • 示例 2:任何不同于“guest”的角色都可以执行 CREATE 操作。

  • 在一个真实的案例中,我有这个:
    public String delete() {
    if(FacesContext.getCurrentInstance().getExternalContext().isUserInRole("administrator"){
    //.....the action to perform
    }
    return "Denied";
    }

    我希望我可以使用注释 @RolesAllowed() EJB 但我没有使用 EJB,而是使用 ManagedBeans。
    那么问题来了:有没有什么办法可以同时使用多个角色呢?一些解决方法!
    示例:如果必须允许一个操作有 3 个角色(管理员、版主、经理)。我有义务做:
    if (FacesContext.getCurrentInstance().getExternalContext().isUserInRole("administrator")
    || FacesContext.getCurrentInstance().getExternalContext().isUserInRole("manager")
    || .....) {
    //....
    }

    并且在所有方法上重现是一种痛苦。像数百种方法:(

    最佳答案

    这需要在 View 端进行控制。当您在某个站点上看到一个您没有足够权限按下的按钮并因此在您按下时出现令人生畏的错误页面时,您自己是否觉得很烦人?

    仅当用户具有所需角色时才在 View 侧呈现按钮,否则将其完全隐藏。

    <h:commandButton value="Delete" action="#{bean.delete}" 
    rendered="#{request.isUserInRole('administrator')}" />

    这对 (CSRF) hack 不敏感,因为 JSF 在应用请求值阶段再次检查条件。

    至于使用多个条件并在单个 View 中一遍又一遍地重复相同的内容,请考虑使用 <c:set>给它一个简短的别名。您甚至可以将它放在某个主模板的顶部,以便所有子模板都可以使用它。
    <c:set var="isPowerUser" value="#{request.isUserInRole('manager') or request.isUserInRole('administrator')}" scope="request" />
    ...
    <h:commandButton rendered="#{isPowerUser}" />
    ...
    <h:commandButton rendered="#{isPowerUser}" />

    关于jsf - 如何正确使用 isUserInRole(role),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6524788/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com