リクエストの認可
ログインの有無による認可は options.preMiddleware で行う。
preMiddleware: function (req, res, next) {
if (req.isLoggedIn()) {
next()
} else {
res.status(403).end()
// Or `next(new Error('hoge hoge'))`
}
}
フィールド単位のアクセス制御
ログインの有無やロールに応じて、一部のフィールドをレスポンスから除外することもできる。
// Server
restify.serve(router, mongoose.model('Hoge', new mongoose.schema({
name: String,
zip: String,
city: String
})), {
access: function (req) {
return req.isLoggedIn() ? 'protected' : 'public';
},
protected: ['zip', 'city']
});
// Client(未ログイン時)
$http.get('/api/v1/Hoge').then(res => {
console.log(res.data)
})
# -> [{ name: 'fuga' }, { name: 'pico' }...]
# zip/city は protected なのでレスポンスに含まれない
全てのフィールドを protected や private に指定し除外しても、空のオブジェクトが返却される。
// Server
restify.serve(router, mongoose.model('Fuga', new mongoose.schema({
nyaa: String,
nyannya: String
})), {
access: function (req) {
return req.isLoggedIn() ? 'protected' : 'public';
},
protected: ['nyaa', 'nyannya', '_id', '__v']
});
// Client(未ログイン時)
$http.get('/api/v1/Fuga').then(res => {
console.log(res.data)
})
# -> [{}, {}, {}, {}...]