【问题标题】:Controller level security in angular角度控制器级别的安全性
【发布时间】:2015-07-30 16:00:44
【问题描述】:

第一次开发 Angular 应用程序,我想知道拥有路由/控制器级别安全性的正确方法是什么。我基本上想将用户限制在某些应用程序部分并有这个要求:

  1. 如果用户未登录,则禁止访问某些路由,如果用户未登录,则重定向到登录,如果用户已登录,则访问该页面。
  2. 根据用户字段禁止访问某些路由,例如如果用户有verified: false对象字段或其他方式来保存用户数据,则将用户重定向到验证页面。如果用户拥有verified: true,则允许访问该页面。

我想如何做到这一点是,要创建一个具有verified() 方法的服务并为用户返回正确的值,我将在控制器中使用该服务,并且此方法基于手动重定向以上要求。我关心的当然是安全,但也不是重新发明轮子。

【问题讨论】:

  • 几乎所有方法都可以从控制台或 Grease/Tampermonkey 轻松“破解”,甚至不需要篡改 JS 资产。我认为在客户端应用程序的上下文中谈论“安全性”是不合适的,尤其是服务器端未备份的部分。

标签: javascript angularjs security controller


【解决方案1】:

例如在run 块中:

$rootScope.$on('$stateChangeStart',
    function (event, toState, toParams, fromState, fromParams) {
        var access_denied = [
            (toState.access === 'public'),
            (toState.access === 'protected'),
            (toState.access === 'private')];

        // example restriction
        if (accedd_denied[1] || accedd_denied[2]) {
            event.preventDefault();
            $state.go('login');
        }

路由器状态示例:

state('login', {
    url: '/user/login',
    controller: 'UserController',
    access: 'public',
})

【讨论】:

  • 感谢您的回复。如果我有多个访问权限怎么办。这就是我的意思,假设未注册的用户无法访问protected,未验证的用户无法访问private。您如何将这两种限制都放在一条路线上?
猜你喜欢
  • 2015-04-22
  • 1970-01-01
  • 2019-04-20
  • 1970-01-01
  • 2018-06-14
  • 1970-01-01
  • 2015-07-02
  • 2010-10-04
  • 1970-01-01
相关资源
最近更新 更多