如何为用户角色配置路由和控制器

时间:2016-03-26 00:18:39

标签: angularjs ngroute

我有一个个人资料页面,我正在向网址/profile/foo的所有用户显示,但是一旦加载,我正在做一些检查以确定查看该个人资料的用户是否是其所有者。如果是这样,我想显示一个编辑按钮,在同一页面中将显示另一个视图并将路线更改为/profile/foo/edit但是我想限制在/profile/foo/edit显示的任何内容,如果该用户不是所有者或者所有者未首先查看/profile/foo,因为加载所有配置文件信息的控制器已配置为该路由。

我确定知道处理编辑的控制器以及/ profile / foo / edit的编辑界面必须延迟加载,具体取决于用户是否是个人资料的所有者。

我最初没有在我的模块上运行.config来设置路由,因为我不知道用户是否是所有者所以我不得不将ng-controller硬编码到一个真正应该是ng-view的DOM元素上最初不能,因为我不想加载编辑视图部分。

所以我的问题是如何在运行时设置这种路由(切换控制器和视图)以及实际加载控制器和视图。仅当用户是个人资料的所有者时。

1 个答案:

答案 0 :(得分:0)

有很多方法可以做到这一点。我强烈建议使用ui-router,因为它是事实上推荐的第三方插件,用于管理Angular项目中的路由。

然后你将使用路由配置锁定路由,如下所示:

 authorize: function(accessLevelReq) {
            if (_.isNull(service.currentUserAccessLevels)) {
                populateUserAccessLevels('public');
            }

            var authenticated = false;
            _.each(accessLevelReq, function(value){
                if(service.currentUserAccessLevels[value]) {
                    authenticated = true;
                }
            });
            return authenticated;
        }

然后在路线更改时,您将检查路线:

public class JunctionBox() {

}

使用某种安全服务:

{{1}}

幸运的是,我有一个种子项目,说明了这个确切的用例。 https://github.com/thinkjones/meanp-seed