所以我基本上是在寻找关于如何改进解决方案的建议。
一些背景首先,
我开发了一个简单的内部授权框架来控制基于 Java/J2EE 的应用程序中的访问和行为,该框架可以在任何模型、视图或控制器层中使用。
当用户登录时,他们会根据分配的角色传递一个用户权限对象。(默认总是拒绝)。权限包括主题(枚举)以及可选权限列表(创建、读取、更新、删除...)。
在某些地方,这用于控制屏幕元素的显示,在其他地方,它与策略模式相结合,以根据用户的角色控制系统行为。
在 JSP 层中,我通过 Scriptlets 访问它,因为 Code Complete 选项确保用户不会输入框架中未定义的值。
代码示例:
<% if (user.can(Permission.somePermission, Subject.subjectOfPermission)) { %>
<td >
...display something if the User can Access the Subject
</td>
<% } %>
<% if (user.cannot(Permission.somePermission, Subject.subjectOfPermission)) { %>
...display something if the User cannot Access the Subject
<% } %>
我很想知道是否有更好的方法来做到这一点?我听说过这样的口头禅,“你不应该使用 scriptlet。一切都应该使用 JSTL 和自定义标签来完成”。
然而,在我看来,通过使用自定义标签,我失去了使用 Code Complete 以及执行框架合同的优势。对我来说,将字符串传递给自定义标签只会增加额外的抽象层(到抽象框架)并增加出错的机会,因为我们现在使用的是简单的字符串。
有没有办法创建将 Enum 作为参数的自定义标签或完全避免这种情况的替代解决方案?