2015-03-28 4 views
1

я пытаюсь сделать инсталлируемый крюк, чтобы сделать некоторые проверки безопасности, чтобы под моим hook.js я установил:Sails Hook маршрут запрещен

routes  : { 
     before : { 
     "/" : function (req, res, view) 
     { 
      ..... 
      res.forbidden(); 
     } 
     } 
    }, 

И я эту ошибку, если я пытаюсь послать запрещенную страницу пользователю :

error: Sending 500 ("Server Error") response: 
TypeError: Object #<ServerResponse> has no method 'view' 
    at Object.forbidden (/Users/jaumard/Documents/workspaceIDE/KikiLib/api/responses/forbidden.js:56:19) 
    at ServerResponse.bound [as forbidden] (/usr/local/lib/node_modules/sails/node_modules/lodash/dist/lodash.js:729:21) 
    at isRouteAllowed (/Users/jaumard/Documents/workspaceIDE/KikiLib/api/hooks/acl.js:66:18) 
    at routeTargetFnWrapper (/usr/local/lib/node_modules/sails/lib/router/bind.js:179:5) 
    at callbacks (/usr/local/lib/node_modules/sails/node_modules/express/lib/router/index.js:164:37) 
    at param (/usr/local/lib/node_modules/sails/node_modules/express/lib/router/index.js:138:11) 
    at pass (/usr/local/lib/node_modules/sails/node_modules/express/lib/router/index.js:145:5) 
    at nextRoute (/usr/local/lib/node_modules/sails/node_modules/express/lib/router/index.js:100:7) 
    at callbacks (/usr/local/lib/node_modules/sails/node_modules/express/lib/router/index.js:167:11) 
    at /usr/local/lib/node_modules/sails/lib/router/bind.js:187:7 
    at /usr/local/lib/node_modules/sails/lib/hooks/i18n/index.js:35:7 
    at Object.i18nInit [as init] (/usr/local/lib/node_modules/sails/node_modules/i18n/i18n.js:89:5) 
    at addLocalizationMethod (/usr/local/lib/node_modules/sails/lib/hooks/i18n/index.js:33:11) 
    at routeTargetFnWrapper (/usr/local/lib/node_modules/sails/lib/router/bind.js:179:5) 
    at callbacks (/usr/local/lib/node_modules/sails/node_modules/express/lib/router/index.js:164:37) 
    at param (/usr/local/lib/node_modules/sails/node_modules/express/lib/router/index.js:138:11) [TypeError: Object #<ServerResponse> has no method 'view'] 
error: Server Error: 
error: TypeError: Object #<ServerResponse> has no method 'view' 
    at Object.forbidden (/Users/jaumard/Documents/workspaceIDE/KikiLib/api/responses/forbidden.js:56:19) 
    at ServerResponse.bound [as forbidden] (/usr/local/lib/node_modules/sails/node_modules/lodash/dist/lodash.js:729:21) 
    at isRouteAllowed (/Users/jaumard/Documents/workspaceIDE/KikiLib/api/hooks/acl.js:66:18) 
    at routeTargetFnWrapper (/usr/local/lib/node_modules/sails/lib/router/bind.js:179:5) 
    at callbacks (/usr/local/lib/node_modules/sails/node_modules/express/lib/router/index.js:164:37) 
    at param (/usr/local/lib/node_modules/sails/node_modules/express/lib/router/index.js:138:11) 
    at pass (/usr/local/lib/node_modules/sails/node_modules/express/lib/router/index.js:145:5) 
    at nextRoute (/usr/local/lib/node_modules/sails/node_modules/express/lib/router/index.js:100:7) 
    at callbacks (/usr/local/lib/node_modules/sails/node_modules/express/lib/router/index.js:167:11) 
    at /usr/local/lib/node_modules/sails/lib/router/bind.js:187:7 
    at /usr/local/lib/node_modules/sails/lib/hooks/i18n/index.js:35:7 
    at Object.i18nInit [as init] (/usr/local/lib/node_modules/sails/node_modules/i18n/i18n.js:89:5) 
    at addLocalizationMethod (/usr/local/lib/node_modules/sails/lib/hooks/i18n/index.js:33:11) 
    at routeTargetFnWrapper (/usr/local/lib/node_modules/sails/lib/router/bind.js:179:5) 
    at callbacks (/usr/local/lib/node_modules/sails/node_modules/express/lib/router/index.js:164:37) 
    at param (/usr/local/lib/node_modules/sails/node_modules/express/lib/router/index.js:138:11) [TypeError: Object #<ServerResponse> has no method 'view'] 

Я под парусами 0.11.0. Я не использую политики вызывают политики применяются только для действия контроллера, и я хочу сделать ACL для просмотра, управления и многое другое ...

Весь исходный код доступен здесь: https://github.com/jaumard/sails-hook-user-acl

Сейчас я использую: res.status(403).send("<h1>" + req.__("Forbidden") + "</h1>"); вместо из res.forbidden();, но было бы неплохо, чтобы отправить просмотр

+1

Вы должны поместить эту логику в политику, а не маршруты –

+0

Можно динамически добавлять политики под крючок? Как ? – jaumard

+0

Я сказал это, потому что я делаю установочный крючок для общей безопасности ACL, поэтому он должен быть динамическим (вроде) – jaumard

ответ

1

Просто нашел обходной путь:

var _addResViewMethod = require("../sails/lib/hooks/views/res.view.js"); 
routes  : { 
     before : { 
     "/office" : function (req, res, view) 
     { 
      ..... 
      _addResViewMethod(req, res, function(){ 
       res.forbidden(); 
      }); 
     } 
     } 
    }, 

EDIT: лучший способ был дан парусные команды здесь https://github.com/balderdashy/sails/issues/2799#issuecomment-115333582

// Wait for the router to be initialized  
sails.on('router:before', function() { 

    // Wait for the views hook to load, so that its routes get bound first 
    // (including the one that mixes in res.view) 
    sails.after('hook:views:loaded', function() { 
     // Bind your routes here 
     sails.router.bind('/office', officeHandler, 'get', {}); 
    }); 

    function officeHandler(req, res) {...res.forbidden()...} 

    return cb(); 
}); 
Смежные вопросы