alaska-user
Version:
Alaska user service
124 lines (113 loc) • 2.36 kB
JavaScript
Object.defineProperty(exports, "__esModule", {
value: true
});
var _alaska = require('alaska');
var _Role = require('./Role');
var _Role2 = _interopRequireDefault(_Role);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
class User extends _alaska.Model {
async preSave() {
if (!this.createdAt) {
this.createdAt = new Date();
}
}
/**
* 验证密码
* @param candidate 待检测密码
* @returns {Promise<boolean>}
*/
auth(candidate) {
return this._.password.compare(candidate);
}
/**
* 判断用户是否有指定权限
* @param id
* @returns {Promise<boolean>}
*/
async hasAbility(id) {
//查找用户特殊权限
if (this.abilities) {
for (let aid of this.abilities) {
//如果abilities属性中储存的是Ability对象
if (aid._id && aid._id === id) {
return true;
}
if (aid === id) {
return true;
}
}
}
//查找用户组权限
if (this.roles) {
for (let rid of this.roles) {
if (!rid.hasAbility) {
rid = await _Role2.default.findById(rid);
}
if (rid) {
// $Flow
let role = rid;
if (await role.hasAbility(id)) {
return true;
}
}
}
}
return false;
}
}
exports.default = User;
User.label = 'User';
User.icon = 'user';
User.titleField = 'username';
User.defaultColumns = 'avatar username email roles createdAt';
User.searchFields = 'username email';
User.defaultSort = '-createdAt';
User.noremove = true;
User.scopes = {
tiny: 'displayName avatar _username',
info: '*'
};
User.fields = {
username: {
label: 'Username',
type: String,
unique: true,
required: true
},
email: {
label: 'Email',
type: String,
index: true
},
password: {
label: 'Password',
type: 'password',
private: true
},
avatar: {
label: 'Avatar',
type: 'image'
},
roles: {
label: 'Roles',
ref: 'Role',
multi: true,
private: true
},
abilities: {
label: 'Abilities',
ref: 'Ability',
multi: true,
private: true
},
createdAt: {
label: 'Registered At',
type: Date
}
};
User.virtuals = {
get displayName() {
return this.username;
}
};
;