【问题标题】:Is it possible use a metadata driven component based authorization with Wicket?是否可以通过 Wicket 使用基于元数据驱动的组件授权?
【发布时间】:2011-12-17 05:51:44
【问题描述】:

是否可以使用基于元数据驱动组件的授权?

Wicket in Action 举个例子:

@AdminOnly
private class ModeLink extends Link {.....}

然后实现授权策略的isActionAuthorized()。

但我觉得为每个角色创建新类并不是一个好的解决方案。

有没有一种元数据驱动的方式来做到这一点?我可以在组件中添加一些元数据,然后在授权策略的isActionAuthorized() 方法中进行检查吗?

【问题讨论】:

    标签: authorization wicket


    【解决方案1】:

    我相信我在这里提供了一个基于元数据的解决方案:Wicket Authorization Using MetaDataKey 以回应您的问题。

    对于注解,您可以使用单个注解,例如 @RequiresRole,使用角色 id 参数化:例如 @RequiresRole("admin")。

    【讨论】:

      【解决方案2】:

      您可以为所有角色使用字符串常量并执行以下操作:

      @Require(MySession.ADMIN_ROLE)
      public class AdminPanel extends Panel {
        // snip
      }
      
      public boolean isActionAuthorized(Component c, Action a) {
        // I usually disallow instantiation of pages and rendering of components
        if (c instanceof Page || a == Component.RENDER) {
          Require r = c.getClass().getAnnotation(Require.class);
          if (r != null && !Strings.isEmpty(r.value()) {
            Roles roles = ((AuthenticatedWebSession)Session.get()).getRoles();
            return roles != null && roles.hasRole(a.value());
          }
        }
        return true;
      }
      

      您也可以使用枚举来禁止随机字符串,而不是字符串。在这种情况下只需使用a.value().name() 来检查角色。

      【讨论】:

        猜你喜欢
        • 2011-08-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-09-16
        • 1970-01-01
        • 1970-01-01
        • 2012-02-13
        相关资源
        最近更新 更多