帆策略 - 使用变量

时间:2016-09-28 16:14:53

标签: node.js sails.js

我开始制定一些看起来像这样的风帆政策:

...
'MyController':{
    'some': ['runPassport', 'isLoggedIn', 'ensureTotpOkIfEnabled'],
    'action': ['runPassport', 'isLoggedIn', 'ensureTotpOkIfEnabled'],
    'here': ['runPassport', 'isLoggedIn', 'ensureTotpOkIfEnabled', 'extra'],
},
....

问题在于重复。我想有一个快捷方式,例如“userIsAuthenticated”。

我可以声明一个变量

var userIsAuthenticated = ['runPassport', 'isLoggedIn', 'ensureTotpOkIfEnabled'];
....

'MyController':{
    'some': userIsAuthenticated,
    'action': userIsAuthenticated,
    'here': Array.concat(userIsAuthenticated, ['extra'],
},

我的问题是这里的行动。我认为语法难以阅读且容易出错。

我试着写:

'MyController':{
    'some': userIsAuthenticated,
    'action': userIsAuthenticated,
    'here': [userIsAuthenticated, 'extra'],
},

哪个看起来很漂亮。它可能有用。虽然我明白我得到一个包含两个项目的数组,第一个项目是一个包含3个项目的数组。

所以,问题是。在Sails中声明这样的策略是否安全。我在手册(http://sailsjs.org/documentation/concepts/policies)中找不到任何提及该语法的内容。可能还有其他方法吗?

1 个答案:

答案 0 :(得分:2)

  

所以,问题是。在Sails或者中声明类似的策略是否安全   不。我在手册中找不到任何提及该语法的内容   (http://sailsjs.org/documentation/concepts/policies)。在那儿   或许其他一些方法?

使用

var userIsAuthenticated = ['runPassport', 'isLoggedIn', 'ensureTotpOkIfEnabled'];
....

'MyController':{
    'some': userIsAuthenticated,
    'action': userIsAuthenticated,
    'here': Array.concat(userIsAuthenticated, ['extra'],
},

'MyController':{
    'some': userIsAuthenticated,
    'action': userIsAuthenticated,
    'here': [userIsAuthenticated, 'extra'],
},
你什么都没赢。由于文档以这种方式描述,因此让其他开发人员更难理解

...
'MyController':{
    'some': ['runPassport', 'isLoggedIn', 'ensureTotpOkIfEnabled'],
    'action': ['runPassport', 'isLoggedIn', 'ensureTotpOkIfEnabled'],
    'here': ['runPassport', 'isLoggedIn', 'ensureTotpOkIfEnabled', 'extra'],
},
....

但我知道你的感受。因此,您可以做的是在模型或控制器级别定义策略:

module.exports.policies = {
    '*': true,
    MyModel: ['runPassport', 'isLoggedIn', 'ensureTotpOkIfEnabled'], // model level
    MyController: { // controller level    
        '*': ['runPassport', 'isLoggedIn', 'ensureTotpOkIfEnabled'],
        fooAction: 'extra'
    }
};

然而问题是fooAction没有继承*的政策,这很奇怪。因此,只会为extra调用fooAction政策。所以你的问题没有真正的解决方案。您可以在此处https://github.com/balderdashy/sails/issues创建提案。