更新されたデータベース アダプター (PostgreSQL 用) を使用して Sails.js のベータ版 (v0.10.0-rc3) を実行しているため、Waterline ORM を介した関連付けの機能を利用できます。さまざまなアクセス レベルに応じて、承認用のロール ベースのユーザー モデルを作成しようとしています。ユーザーとロールの関連付けは 1 対多です。私のモデルは次のとおりです。
API/モデル/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/モデル/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
現在のところ、ロール名を取得できた唯一の方法は、ロール オブジェクトに対して 2 番目のクエリを実行することです。