2016-12-05 2 views
0

Sailsによって生成されたAPIに対するすべてのHTTP GETリクエストを制限したい。では、どのようにフィルタをすべての着信API GET要求に適用できますか。SailsでGETリクエストにモデルフィルタを自動的に適用する方法

具体的には、ほとんどのモデルには、publicityLevelという属性があります。これは、モデルが公開されているかどうかを示します。だから私はすべてのモデルが自動的にすべての着信GET要求のためのフィルタ(publicityLevel: 'public'のような)を適用するようにしたい。

さらに進んで、私はユーザーが特定のモデルを見ることができるかどうかを決定するいくつかのコードを書きたいと思います。したがって、ユーザーが管理者の場合は、このフィルタを適用しないでください。ユーザーが管理者でない場合は、このフィルタを適用します。

答えて

0

私は青写真で解決するために同様の問題を抱えており、解決しました。あなたは青写真を使用しているときは、req.options.modelからmodelNameを得ることができます

我々は青写真について話している場合。 私はそれがユーザーが要素と同じグループに属しているかどうかをチェックするために使っていました。

残念ながら、this[modelName]のオプションは小文字で始まるモデル名を与えるため、使用できません。 var modelName = req.options.model.charAt(0).toUpperCase() + req.options.model.slice(1);

とは、あなたは、私が唯一の彼自身のグループの要素をユーザーの編集をできるように、一般的な政策のためにそれを使用this[modelName].whateverYouNeed

自由に使用できます。

var modelName = req.options.model.charAt(0).toUpperCase() + req.options.model.slice(1) 
    var elementID = null 

    if (req.params.id) { // To handle DELETE, PUT 
    elementID = req.params.id 
    } 
    if (req.body.id) { // To handle POST 
    elementID = req.body.id 
    } 

    this[modelName].findOne({ 
    id: elementID 
    }).exec(function(err, contextElement) { 
    if(err) { 
     return res.serverError(err) 
    } 
    if(contextElement.group=== req.user.group.id) { 
     sails.log('accessing own: ' + modelName) 
     return next() 
    } 
    else { 
     return res.forbidden('Tried to access not owned object') 
    } 
    }) 
+0

これはルートハンドラですか?このコードはどこに行きますか? – AskYous

+0

oh。ごめんなさい!これはポリシーです。 –

関連する問題