1

私は、sails.js、SuperUser、Admin、User、および SuOrAdmin に 4 つのポリシーと、ブループリント コントローラーを備えた 3 つのモデルを持っています。これがポリシー構成です。

   '*': 'SuperUser',

  User:{
    '*': 'SuOrAdmin',
    findOne: 'User'
  },

  Empresa:{
    '*': 'SuperUser',
    findOne: 'Admin',
    findOne: 'User'
  },

  Noticia:{
    '*': 'SuOrAdmin',
    find: 'User',
    findOne: 'User'
  } 

SuperUser でログインすると、Noticia の find メソッドを除くすべてのモデルを CRUD できますが、管理者でログインすると、Noticia モデルを CRUD できます。これは SuOrAdmin ポリシーです。

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

  // User is allowed, proceed to the next policy, 
  // or if this is the last policy, the controller
  if ( (req.session.user && req.session.user.admin) || (req.session.SuperUser) ) {
    return next();
  }

  // User is not allowed
  // (default res.forbidden() behavior can be overridden in `config/403.js`)
  return res.json(403, {error: 'You are not permitted to perform this action.'});
};

誰かが私を助けてくれませんか、私はこの問題で2日間立ち往生しています。

@mikermcneil

4

2 に答える 2

1

アプローチに関しては、@arkoakの回答を必ず確認してください。これで問題が完全に解決するかどうかはわかりませんが、他に役立つことがあります。

現在、ポリシー構成の LHS にモデルをマッピングしています。それが機能している理由は、適切な推測ロジックが適切に配置されているためですが、実際にはコントローラーを使用したいのです。ポリシーは、ユーザーからの受信リクエストとコントローラー アクションの間に位置する構成可能なミドルウェアです。

たとえば、Userキーとしてではなく、次を試してください。

UserController:{
  '*': 'SuOrAdmin',
  findOne: 'User'
}

私が言及したいもう1つのことは、ポリシーがカスケードしないことを明確にすることです-つまり、次の場合:

'*': 'foo',

NoticiaController: { '*': 'bar' }

...その場合、NoticiaController のアクションはbar( fooANDではなくbar- 私のドリフトをキャッチしますか?) の下でのみ保護されます。

スーパー管理者として見つけることができないというあなたの正確な問題についてはNoticia、@arkoakが提案したように、ポリシーが相互に排他的であるためだと思います.

それが役立つことを願っています!

于 2015-02-26T17:53:55.133 に答える