如何覆盖路由,重定向到UI5中的另一个视图? [英] How to override the routing and redirect to another view in UI5?

查看:14
本文介绍了如何覆盖路由,重定向到UI5中的另一个视图?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

给出了基于Shop Administration Tool的简化示例应用程序。在视图之间使用侧边栏导航时,我只显示不同的视图,例如View#1、View#2等。这些视图都是独立的视图,每个视图都有自己的XML模板和JS控制器。

现在,我要为每个视图添加权限检查,如果用户没有权限,则应将其重定向到主视图,而不是所需的视图。

我已经实现了导航前检查:

router.attachRoutePatternMatched(async (event) => {

    const targetView = event.getParameters().view.getProperty("viewName");

    const isPermitttedToSeeView = await this.checkUserPermission(targetView);

    if (!isPermitttedToSeeView) {

        MessageToast.show("Sorry, you don't have permissions.");

        router.navTo("mainView");

    }

}, this);

此代码可以工作,但问题是在没有权限的情况下,用户首先看到MessageToast消息(OK),然后被重定向到禁用视图(BAD),然后立即重定向到mainView视图(OK)。

我尝试使用attachBeforeRouteMatched,希望在这种情况下还没有执行路由,如果需要,我可以重定向用户,并且用户不会看到禁止的视图。但没有,我仍然看到禁用视图一秒钟,然后被重定向到mainView

如何防止重定向到禁用视图并将用户直接发送到mainView视图?换句话说,如何更改路由导航管道?

推荐答案

可能的解决方法是使用«硬»重定向而不是路由:

mLibrary.URLHelper.redirect("%desiredURL%", false);

其中mLibrarysap.ui.define通过"sap/m/library"定义。

这将丢弃任何正在进行的路由,并将强制(就UX而言,而不是就安全性而言)将用户重定向到所需的URL。

从性能角度看,这可能不是最佳解决方案,因为它可能会导致不需要的呈现,但这是我发现的防止用户被路由到不需要的视图的唯一方法。

这篇关于如何覆盖路由,重定向到UI5中的另一个视图?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆