2016-07-19 21 views
0

Ich benutze mean.js, um registrierten Benutzern Zugriff auf Inhalte zu ermöglichen. Es funktioniert irgendwie. Ich kann isAllowed zu! IsAllowed ändern, damit die Leute den Inhalt sehen können. Das Problem besteht darin, dass der Inhalt nicht autorisiert wird, wenn sich der Benutzer anmeldet. Das Artikelbeispiel funktioniert einwandfrei. Aber wenn ich meinen eigenen Bereich erstelle, können angemeldete Benutzer nicht auf Seiten zugreifen!Benutzer Autorisierung funktioniert nicht für Mean.JS

grundsätzlich Also, wenn ich mich einlogge, bekomme ich Nachricht: ‚User nicht berechtigt ist‘, wenn ich versuche, gehen auf localhost: 3000/requestoffwork

Wenn ich mich einlogge und isAllowed zu isAllowed ändern, ich darauf zugreifen können

'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' 
     }); 
     } 
    } 
    }); 
}; 

Dies ist die Route

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

Und hier ist die Daten für den Benutzer

{"_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":”"} 

Antwort

2

Haben Sie die Berechtigungen zu den clientseitigen Routen gut hinzugefügt?

In modules/youModule/client/config/youModule.client.routes.js fügen Sie diese:

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' 
     } 
     }) 
    } 

Hoffnung, das hilft.

+1

Ich würde diesen Vorschlag aufwerten, wenn ich 15 Rufpunkte hätte, @Luke Kroon. Das Problem war der Abschnitt "Deserialisierung des Benutzers" im Admin-Modul. Ich habe das zu meinem neuen Modul hinzugefügt und es hat funktioniert! Ich hoffe, jemand liest das und findet es hilfreich. Tut mir leid, dass ich nicht upvotiert bin, Luke :) –