88 lines
2.2 KiB
JavaScript
88 lines
2.2 KiB
JavaScript
// Copyright 2021 99cloud
|
|
//
|
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
// you may not use this file except in compliance with the License.
|
|
// You may obtain a copy of the License at
|
|
//
|
|
// http://www.apache.org/licenses/LICENSE-2.0
|
|
//
|
|
// Unless required by applicable law or agreed to in writing, software
|
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
// See the License for the specific language governing permissions and
|
|
// limitations under the License.
|
|
|
|
import { action, observable } from 'mobx';
|
|
import client from 'client';
|
|
import Base from 'stores/base';
|
|
import List from 'stores/base-list';
|
|
|
|
export class RoleStore extends Base {
|
|
get client() {
|
|
return client.keystone.roles;
|
|
}
|
|
|
|
@observable
|
|
implyRoles = {};
|
|
|
|
@observable
|
|
systemRoles = new List();
|
|
|
|
@action
|
|
async fetchImpliedRoles({ id }) {
|
|
const rolesResult = await this.client.implies.list(id);
|
|
const {
|
|
role_inference: { implies },
|
|
} = rolesResult;
|
|
const sources = [
|
|
'nova',
|
|
'neutron',
|
|
'glance',
|
|
'placement',
|
|
'heat',
|
|
'keystone',
|
|
'cinder',
|
|
];
|
|
const sourceRole = {};
|
|
sources.forEach((source) => {
|
|
const roles = [];
|
|
implies.forEach((it) => {
|
|
if (it.name.indexOf(source) !== -1) {
|
|
const role = it.name.split(`${source}_`)[1];
|
|
roles.push(role);
|
|
}
|
|
});
|
|
sourceRole[source] = roles;
|
|
});
|
|
this.isLoading = false;
|
|
this.implyRoles = sourceRole;
|
|
}
|
|
|
|
checkSystemRole = (roleItem) => {
|
|
return roleItem.name === 'admin' || roleItem.name === 'reader';
|
|
};
|
|
|
|
@action
|
|
async fetchSystemRoles() {
|
|
this.systemRoles.isLoading = true;
|
|
const result = await this.client.list();
|
|
const { roles = [] } = result;
|
|
const systemRoles = roles.filter((it) => {
|
|
return this.checkSystemRole(it);
|
|
});
|
|
this.systemRoles.data = systemRoles;
|
|
this.systemRoles.isLoading = false;
|
|
return systemRoles;
|
|
}
|
|
|
|
@action
|
|
update({ id }, newObject) {
|
|
const body = {};
|
|
body[this.responseKey] = newObject;
|
|
return this.submitting(this.client.patch(id, body));
|
|
}
|
|
}
|
|
|
|
const globalRoleStore = new RoleStore();
|
|
export default globalRoleStore;
|