我正在使用更新的数据库适配器(用于 PostgreSQL)运行 Sails.js 的 beta 版本(v0.10.0-rc3),这样我就可以通过 Waterline ORM 进行关联。我正在尝试根据不同的访问级别创建基于角色的用户模型进行授权。用户到角色关联是一对多的。我的模型是:
api/models/User.js
module.exports = {
attributes: {
firstName: {
type: 'string',
required: true
},
lastName: {
type: 'string',
required: true
},
fullName: function() {
return this.firstName + " " + this.lastName;
},
email: {
type: 'email',
required: true,
unique: true
},
encryptedPassword: {
type: 'string'
},
role: {
model: 'role'
},
groups: {
collection: 'group',
via: 'users'
}
},
toJSON: function() {
var obj = this.toObject();
delete obj.password;
delete obj.confirmation;
delete obj._csrf;
return obj;
},
beforeCreate: function (values, next) {
// Makes sure the password and password confirmation match
if (!values.password || values.password != values.confirmation) {
return next({err: ['Password does not match password confirmation.']});
}
// Encrypts the password/confirmation to be stored in the db
require('bcrypt').hash(values.password, 10, function passwordEncrypted(err, encryptedPassword) {
values.encryptedPassword = encryptedPassword;
next();
});
}
};
api/models/Role.js
module.exports = {
attributes: {
name: {
type: 'string',
required: true,
unique: true
},
users: {
collection: 'user',
via: 'role'
},
permissions: {
collection: 'permission',
via: 'roles',
dominant: true
}
}
};
我知道 Waterline 还不支持通过关联,但我仍然应该能够访问与用户关联的角色名称,对吗?例如:user.role.name
到目前为止,我能够检索角色名称的唯一方法是对角色对象进行第二次查询。