2016-07-19 19 views
0

私はmean.jsを使用して、登録ユーザーがコンテンツにアクセスできるようにしています。それは働いているのです。私はisAllowedに変更することができます!isAllowedは、人々にコンテンツを見せることができます。問題は、ユーザーがログインしてもコンテンツが承認されないということです。記事の例はうまくいきます。しかし、自分のセクションを作成すると、ログインしたユーザーはページにアクセスできなくなります。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評判のポイントを持っていれば、この提案をアップヴォートするだろう、@ルーククーン。問題は、管理モジュールの「ユーザーのシリアル化解除」部分でした。私はそれを私の新しいモジュールに追加しました。誰かがこれを読んで助けてくれることを願っています。 upvotingしないで申し訳ありません、ルーク:) –

関連する問題