UNPKG

alaska-user

Version:

Alaska user service

124 lines (113 loc) 2.36 kB
'use strict'; 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; } };