一种路由使用AngularJS的安全路由方法

一种路由使用AngularJS的安全路由方法
简介

因为它的出现,AngularJS用了很长时间。它是一个用于开发单页面应用的Javascript框架(SPA),它有一些很好的功能,如双向结合,教学,等。本文主要介绍角路由安全政策。它是一个客户端的安全框架,可以由角发展实现。我已经测试过。除了确保客户端路由的安全,你还需要确保服务器安全方面的访问。客户端安全策略有助于减少对服务器的额外的访问。但是,如果有人使用欺骗浏览器访问服务器,然后服务器端的安全策略应该能够拒绝未经授权的访问。在这篇文章中,我讨论客户机安全策略。

1在应用程序模块级别定义全局变量

定义应用程序的角色:

var角色= {
超级用户:0,
管理员:1,
用户:2
};
对应用程序定义进行未授权访问的路由:

无功routeforunauthorizedaccess = / someangularrouteforunauthorizedaccess;
2授权服务的定义

appmodule.factory('authorizationservice功能(合资源,$ Q,rootscope美元,美元的位置){
返回{
对会话的权限缓冲区,以避免后续请求停止访问服务器。
permissionmodel:{权限:ispermissionloaded:假} { },

PermissionCheck:功能(rolecollection){
返回承诺(承诺)。
VaR q.defer美元递延=();

这里是一个指针,用于在指针中的承诺范围内保存/上部作用域。
无功parentpointer =这;

检查您是否可以从访问对象(登录用户的字符列表)访问服务。
如果(这。permissionmodel。ispermissionloaded){

检查当前用户是否访问当前路由。
this.getpermission(this.permissionmodel,rolecollection,延期);
{人}
如果您没有许可对象,我们将访问服务器访问。
是the'api / / permissionservice的Web服务的例子。

资源( / / permissionservice API),得到()。promise.then美元(功能(响应){)
当服务器返回后,我们开始填充一个权限对象。
parentpointer.permissionmodel.permission =响应;

将处理完全标志设置为true并存储在会话中的权限对象,
会话用户,我们可以在后续请求的路由中重用权限对象。
parentpointer.permissionmodel.ispermissionloaded =真;

检查当前用户是否必须具有基于角色的访问路由。
parentpointer.getpermission(parentpointer.permissionmodel,rolecollection,延期);
}
);
}
返回deferred.promise;
},

方法:检查当前用户是否有访问路径。
/ / 'permissionmodel'preserves当前用户的角色信息从服务器返回的
/ / 'rolecollection'saves角色可以访问现有的路由表
/ / 'deferred'is对象用来处理承诺
GetPermission: function (permissionModel, roleCollection, deferred) {
无功ifpermissionpassed = false;

Angular.forEach(rolecollection、功能(作用){
开关(角色){
案例roles.superuser:
如果(permissionmodel。许可。issuperuser){
ifpermissionpassed =真;
}
打破;
Case roles.admin:
如果(permissionmodel。权限。管理员){
ifpermissionpassed =真;
}
打破;
案例roles.user:
如果(permissionmodel。权限。用户){
ifpermissionpassed =真;
}
打破;
违约:
ifpermissionpassed = false;
}
});
如果(!ifpermissionpassed){
如果用户没有必要的权限,我们就让用户访问页面。
location.path美元(routeforunauthorizedaccess);
因为这将延迟处理,在此期间页面位置可能会更改,
我们将监控 / / $ locationchangesuccess事件
当事件发生时,发出承诺。
rootscope美元。美元(美元locationchangesuccess功能(下,电流){
deferred.resolve();
});
{人}
deferred.resolve();
}
}
};
});
3加密的路由

然后让我们努力加密路由:

无功appmodule = angular.module(appmodule
。配置(功能(routeprovider美元,美元locationprovider){
routeprovider美元
当( / superuserspecificroute,{
TemplateUrl: /模板/超级用户。HTML / / /视图模板路径
caseinsensitivematch:真,
控制器:'superusercontroller ' / /角路由控制器
解决:{
我们将在上面的工作中使用我们的,调用授权服务。
决心是一个很好的特点,角,可以确保
只有在下文提到后才处理该承诺。
将 / /控制器(在这种情况下superusercontroller)应用于路由。
功能权限:(authorizationservice,$路线){
返回authorizationservice.permissioncheck({角色。超级用户});
},
}
})
当( / userspecificroute,{
TemplateUrl: / /用户HTML模板,
caseinsensitivematch:真,
控制器:'usercontroller,
解决:{
功能权限:(authorizationservice,$路线){
返回authorizationservice.permissioncheck({角色。用户});
},
}
})
当( / adminspecificroute,{
TemplateUrl: / /管理模板HTML,
caseinsensitivematch:真,
控制器:'admincontroller,
解决:{
功能权限:(authorizationservice,$路线){
返回authorizationservice.permissioncheck({角色。管理});
},
}
})
当( / adminsuperuserspecificroute,{
TemplateUrl: / / adminsuperuser HTML模板,
caseinsensitivematch:真,
控制器:'adminsuperusercontroller,
解决:{
功能权限:(authorizationservice,$路线){
返回authorizationservice.permissioncheck({ roles.admin,超级用户角色。});
},
}
});
});

tag:路由方法电脑软件angularjs

相关内容