【问题标题】:SAPUI5 restrict page visibilitySAPUI5 限制页面可见性
【发布时间】:2015-12-14 10:05:10
【问题描述】:

是否有任何方法/最佳实践可以在 SAPUI5 中向用户隐藏不可用的页面?

让我们看一个例子。我有一个带有用户登录页面的复杂应用程序。客户可以在这里登录应用程序,并从后端系统检索他们的角色数据。基于这些角色,不允许某些用户创建新对象。只有登录的用户才能看到应用程序页面。 我正在使用路由,因此也可以通过直接链接访问编辑等功能。

目前我在 Component.js 中使用 onRouteMatched 事件处理程序,它检查当前用户会话存储。如果未找到用户会话,则将请求重定向到登录页面。

问题在于它会在导航到登录页面之前显示请求的页面一两秒钟。真的很丑。

我应该在哪里实现这样的功能?这个用例有什么钩子方法吗?

我想我需要一个钩子方法,在显示与给定路由匹配的视图并将调用重定向到登录页面之前调用该方法。很遗憾,我在该主题中找不到任何有用的文档。

谢谢!

【问题讨论】:

  • 只是一个想法:让你的视图由两个视图组成。一个占位符(在onRouteMatched...之前显示...可能是一个带有busy: true 的空面板)和实际内容(在找到用户会话时替换占位符)。这并不能解决您的 1-2 秒延迟。但它隐藏了一些丑陋。
  • 我有和你一样的问题和解决方案。我想出了在我的路由器中覆盖parse 函数的解决方案,在这个函数中,您只会收到 url 更改的哈希值,并且您必须根据您的路由和权限解析哈希值。如果授予权限,我将使用参数执行超级解析,否则我给函数空参数(["", undefined]

标签: routing authorization sapui5


【解决方案1】:

我使用的方法记录在这里Display a Target

总而言之,您可以将视图分配给manifest.json 中的目标,但不能分配给路线/模式。这使得它无法通过直接链接访问。

在您的应用程序中,您可以“显示”视图而不是路由到它。行为是相同的,只是您确实丢失了历史记录。因此,按下浏览器后退按钮的行为会有所不同,因为您实际上并没有路由到新视图。

this.getOwnerComponent().getRouter().getTargets().display("edit", {
    fromTarget : "home"
});

如果您仍希望通过直接链接访问视图,您可以在允许所有用户访问的视图中使用自定义 URL 参数。

例如,你可以使用路由

yourAppUrl.com/home?navTo=edit

在你的控制器中,使用 jQuery 来解析参数。

_onPatternMatched: function() {
    var navParam = jQuery.sap.getUriParameters().get("navTo");
    if (navParam === "edit") {
        //handle your user verification here, then display the target
        this.getOwnerComponent().getRouter().getTargets().display("edit", {
            fromTarget : "home"
        });
    }
}

【讨论】:

    【解决方案2】:

    不幸的是,我所知道的没有简单的钩子。我很想在sap.ui.core.routing.Router 上看到beforeRouteMatched 或类似的东西,但现在什么都没有......

    无论如何,您有多种可能性来实现这一目标。我能想到的最有前途的解决方案是这样的:

    根据授权动态添加您的路线

    首先将您的路由配置存储在一个简单的对象中,然后在您的授权调用返回后,使用路由器addRoute 方法稍后根据用户授权动态添加允许的路由。您唯一需要注意的是访问应用程序的初始路由。您必须存储该哈希,直到您的路线配置设置完毕并在添加路线后重新触发初始导航。使用HashChanger.setHash 来实现这一点。

    注意

    客户端授权检查永远不会保存,需要在所有后端服务中进行双重检查!

    【讨论】:

      猜你喜欢
      • 2018-03-05
      • 1970-01-01
      • 2020-12-09
      • 1970-01-01
      • 2012-07-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多