我开始制定一些看起来像这样的风帆政策:
...
'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)中找不到任何提及该语法的内容。可能还有其他方法吗?
答案 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创建提案。