gpt4 book ai didi

angularjs:app.config 中的条件路由

转载 作者:行者123 更新时间:2023-12-02 21:49:06 24 4
gpt4 key购买 nike

我在 angular.js ui-router 中遇到问题,无法解决。

问题:

如果用户是 EnterpriseAdmin,我希望用户访问配置中定义的所有路由;如果用户是 Enterprise 用户,我希望用户限制某些路由。

路由在配置中定义:

 var adocsModule = angular.module('myApp', ['ngResource', 'ngRoute','ui.bootstrap','ui.router', 'ngAnimate']) 
.config(['$stateProvider', '$urlRouterProvider', function ($stateProvider, $urlRouterProvider) {
$stateProvider.state('Registration', {
url: "/Registration",
templateUrl: '/Scripts/App/Registration/Templates/registration.html', controller: 'CoursesController'
})
.state('Registration.Instructors', {
url: "/Instructors",
templateUrl: '/Scripts/App/Instructors/Templates/instructors.html', controller: 'InstructorController'
})
.state('Registration.Courses', {
url: "/Courses",
templateUrl: '/Scripts/App/Instructors/Templates/courses.html', controller: 'CoursesController'
})

有人可以帮我解决这个问题吗,因为根据我的理解,app.js 是在所有 Controller 之前加载的。当然,如果用户是 EnterpriseAdmin 或 Enterprise 用户,我可以检查 Controller ,但到目前为止,所有路由都已配置并且用户可以访问它们。

有什么方法可以在配置 block 中进行ajax调用,然后定义一个全局变量,然后通过检查它我可以配置一些路由还是不配置?

任何帮助将不胜感激问候

最佳答案

$stateProvider.state 有一个数据属性。一种方法是向您的状态添加 auth 选项。

$stateProvider.state('Registration.Instructors', {
url: "/Instructors",
templateUrl: '/Scripts/App/Instructors/Templates/instructors.html',
controller: 'InstructorController',
data: { auth: "EnterpriseAdmin"}
})

然后您可以在任何状态开始加载之前监听 ui-router 触发的事件,并在用户未经授权时阻止它:

app.run(function($rootScope, user){
$rootScope.$on('$stateChangeStart', function(event, toState, toParams, fromState, fromParams){
if ( toState.data.auth === 'EnterpriseAdmin' && !user.isAdmin() ) {
event.preventDefault();
return false;
}
})
});

您甚至可以根据您的用户界面逻辑将他重定向到另一个状态:

 $state.go('login');

关于angularjs:app.config 中的条件路由,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20978248/

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