yoqw/web/cms/app/services/auth-service.js
2020-07-01 15:22:07 +08:00

79 lines
2.5 KiB
JavaScript

import Service from '@ember/service';
import { computed } from '@ember/object';
import { inject as service } from '@ember/service';
import $ from 'jquery'
export default Service.extend({
routing: service('router'),
dialog: service('dialog'),
roles: computed.alias('user.roles'),
admin: computed('roles', function() {
return this.get('roles') && this.get('roles').includes('ADMIN');
}),
authorities: computed.alias('user.permissions'),
hasPerm(perm) {
let me = this;
me.auth();
return !perm ||
me.get('admin') ||
me.get('permissions') &&
me.get('permissions').includes(perm);
},
auth(transition) {
let me = this;
let user = me.get('user');
if (!user) {
$.ajax({
url: 'auth/info',
type: 'get',
async: false,
success(r) {
console.log('auth info response: ', r);
if (r.success) {
user = r.data;
me.set('user', user);
}
else {
me.get('dialog').alert(r.message);
}
},
error(jqXHR) {
console.log('Ajax request error caused', arguments);
if (jqXHR.status === 401) {
if (window.localStorage) {
window.localStorage.setItem('prevURL', window.location.href);
}
window.location.href = jqXHR.getResponseHeader('location');
}
}
});
}
if (user && !user.tenant) {
if (transition) {
me.set('prevTransition')
}
me.get('routing.currentRouteName') !== 'select-tenant' &&
me.get('routing').transitionTo('select-tenant');
}
return user;
},
retryPrevTransition() {
let me = this;
let prevTransition = me.get('prevTransition');
if (prevTransition) {
prevTransition.retry();
}
else {
me.get('routing').transitionTo('index');
}
},
logout() {
const me = this;
me.get('ajax').doPost(false, 'auth/logout', () => {
me.set('user', null);
me.get('message').alert('注销成功');
// me.get('router').transitionTo('login');
});
}
});