2016-07-19 6 views
0

Я использую mean.js, чтобы зарегистрированные пользователи могли получать доступ к контенту. Это своего рода работа. Я могу изменить isAllowed to! IsAllowed, чтобы люди могли видеть контент. Проблема заключается в том, что контент не разрешен при входе пользователя в систему. Пример статей отлично работает. Но когда я создаю свой раздел, вошедшие в систему пользователи не могут получить доступ к страницам!User Authorization не работает для Mean.JS

Так в основном, если я войти, я получаю сообщение: «Пользователь не имеет права», если я стараюсь идти на локальный: 3000/requestoffwork

Если я войти и изменить isAllowed к isAllowed, я могу получить к нему доступ

'use strict'; 

/** 
* Module dependencies. 
*/ 
var acl = require('acl'); 

// Using the memory backend 
acl = new acl(new acl.memoryBackend()); 

/** 
* Invoke Articles Permissions 
*/ 
exports.invokeRolesPolicies = function() { 
    acl.allow([{ 
    roles: ['admin'], 
    allows: [{ 
     resources: '/api/articles', 
     permissions: '*' 
    }, { 
     resources: '/api/articles/:articleId', 
     permissions: '*' 
    }] 
    }, { 
    roles: ['user'], 
    allows: [{ 
     resources: '/requestoffwork', 
     permissions: '*' 
    }, { 
     resources: '/api/articles/:articleId', 
     permissions: ['get'] 
    }] 
    }, { 
    roles: ['guest'], 
    allows: [{ 
     resources: '/api/articles', 
     permissions: ['get'] 
    }, { 
     resources: '/api/articles/:articleId', 
     permissions: ['get'] 
    }] 
    }]); 
}; 

/** 
* Check If Articles Policy Allows 
*/ 
exports.isAllowed = function (req, res, next) { 
    var roles = (req.user) ? req.user.roles : ['guest']; 

    // If an article is being processed and the current user created it then allow any manipulation 
    if (req.article && req.user && req.article.user.id === req.user.id) { 
    return next(); 
    } 

    // Check for user roles 
    acl.areAnyRolesAllowed(roles, req.route.path, req.method.toLowerCase(), function (err, isAllowed) { 
    if (err) { 
     // An authorization error occurred. 
     return res.status(500).send('Unexpected authorization error'); 
    } else { 
     if (isAllowed) { 
     // Access granted! Invoke next middleware 
     return next(); 
     } else { 
     return res.status(403).json({ 
      message: 'User is not authorized' 
     }); 
     } 
    } 
    }); 
}; 

Это маршрут

app.route('/requestoffwork').all(managementPolicy.isAllowed) 
    .get(management.list) 
    .post(management.submit); 

А вот данные для пользователя

{"_id":"5788fe46587a1c0b07a04078","displayName":"","provider":"local","__v":0,"created":"2016-07-15T15:16:22.625Z","roles":["user"],"profileImageURL":"modules/users/client/img/profile/default.png","email":"[email protected]","lastName":"","firstName":”"} 

ответ

2

Вы добавили разрешения на трассировку на стороне клиента?

В modules/youModule/client/config/youModule.client.routes.js добавить следующее:

function routeConfig($stateProvider) { 
    $stateProvider 
     .state('yourState', { 
     abstract: true, 
     url: '/requestoffwork', 
     template: '<ui-view/>', 
     data: { 
      roles: ['user'], //here you must specify the roles as well 
      pageTitle: 'requestoffwork' 
     } 
     }) 
    } 

Надеется, что это помогает.

+1

Я бы поднял это предложение, если бы у меня было 15 очков репутации, @Luke Kroon. Проблема заключалась в том, что часть «de-serialize user» в модуле администратора. Я добавил это к моему новому модулю, и это сработало! Надеюсь, кто-то прочитает это и сочтет это полезным. Извините, что не уклонился, Люк :) –

Смежные вопросы