曲折:用户是请求安全授权的用户



我使用屈服来生成项目。有针对CRUD模块的自动生成的Hushorization功能。使用App/Controllers/Articles.server.controller.js中的文章示例。授权是:

exports.hasAuthorization = function(req, res, next) {
    if (req.article.user.id !== req.user.id) {
        return res.status(403).send('User is not authorized');
    }
    next();
};

我想添加用户角色,因此管理员或所有者可以编辑:

exports.hasAuthorization = function(req, res, next) {
    if (req.article.user.id !== req.user.id) {
        var isAdmin = false;
        for (var userRoleIndex in req.user.roles) {
            if ('admin' === req.user.roles[userRoleIndex]) {
                isAdmin = true;
            }
        }
        if (!isAdmin) {
            return res.status(403).send('User is not authorized');
        }
    }
    next();
};

问题1这是安全的吗?也许更好的问题是这有多安全?

问题2如果不安全,那么使其安全的方法是什么?我必须在此问题中做类似的事情,还是已经内置了?

您不必在该答案中做任何事情,因为(如果我记得很好)sunjs正在将PassportJS用于该内容。

如果我可能建议您,您可以从路线中传递角色,因此您将没有管理员角色硬编码,并且此方法将更加重复使用。您可以像这样使用它:

app.route('/articles/:id')
        .get(users.requiresLogin, users.hasAuthorization(['user']), articles.read)
        .delete(users.requiresLogin, users.hasAuthorization(['admin']), articles.delete);

最新更新