Node.js Bookshelf.js Knex关系问题

时间:2018-08-21 21:59:53

标签: node.js express knex.js bookshelf.js

我真的迷路了,很想得到一些帮助,这使我很困惑。

我的数据库结构如下:

  

表->用户(具有role_id)

     

表->角色(具有role_id,role_name)

基于用户的role_id,我想使用role_id进行身份验证。

这是我的路线:

router.get('/.isadmin', jwtAuth, authorizedRoles('admin'), function(req, res) {
    const { id, orgId, role_id } = req.user.attributes;
    res.json({
        success: true,
        id,
        orgId,
        roleId: role_id
    })
});

这是我的策略:

passport.use(new JwtStrategy(opts, function(jwt_payload, done) {
    // User.where('id', jwt_payload.id).fetch({withRelated: 'roles'})
    console.log('jwt_payload', jwt_payload)
        User.where('id', jwt_payload.id).fetch({withRelated: 'roles'})
        .then(user => user ? done(null, user) : done(null, false))
        .catch(err => done(err, false));
}));

这是我的用户模型:

const Role = require('./role');
module.exports = bookshelf.Model.extend({
    tableName: 'user',
    roles() {
        return this.hasMany(Role, 'role_id')
    },

这是我的榜样:

module.exports = bookshelf.Model.extend({
    tableName: 'roles'
});

这是我的authorizedRoles()函数(尚未完成)。我遇到的问题是,我希望能够传递authorizedRoles('admin'),并且从逻辑上讲,如果通过身份验证的用户的role_id = 2,则它应该与表匹配->角色条目,其中role_id = 2且与role_name =“管理员”

module.exports = function(...authorizedRoles) {
    return function (req, res, next) {

        const user = req.user.attributes;
        const currentUserRole = req.user.attributes.role_id;
        const validRoles = req.roles;

        // const currentUserRoles = validRoles.find(currentUserRole);
        const test = req.user.related('roles');

        const currentUserRoles = req.user.related('roles').models.map(role => {
            debugger;
            // return role.attributes.role_id === currentUserRole;
            return role.attributes.role_id
        });

        if (!_.intersection(currentUserRoles, authorizedRoles).length) {
            res.status(403);
            res.send('Not permitted');
            return;
        }
        next();
    }
};

对于我的问题:

req.user.related('roles').models.map(role => {

仅返回一个角色,该角色与用户表中用户的ID与表角色中的role_id相匹配。它应与表(用户) role_id -> 表(角色) role_id

0 个答案:

没有答案