79 lines
2.5 KiB
JavaScript
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');
|
|
});
|
|
}
|
|
});
|