mirror of https://github.com/rancher/dashboard.git
97 lines
2.7 KiB
Vue
97 lines
2.7 KiB
Vue
<script>
|
|
import CreateEditView from '@shell/mixins/create-edit-view';
|
|
import CruResource from '@shell/components/CruResource';
|
|
import { MANAGEMENT } from '@shell/config/types';
|
|
import { PROJECT_ID } from '@shell/config/query-params';
|
|
import ProjectMemberEditor from '@shell/components/form/ProjectMemberEditor';
|
|
|
|
export default {
|
|
components: {
|
|
CruResource,
|
|
ProjectMemberEditor,
|
|
},
|
|
|
|
mixins: [CreateEditView],
|
|
inheritAttrs: false,
|
|
async fetch() {
|
|
await this.$store.dispatch('management/findAll', { type: MANAGEMENT.USER });
|
|
this.projects = await this.$store.dispatch('management/findAll', { type: MANAGEMENT.PROJECT });
|
|
this.binding['projectId'] = this.binding.projectId || this.projects[0]?.id.replace('/', ':');
|
|
},
|
|
data() {
|
|
return {
|
|
binding: {
|
|
permissionGroup: 'member',
|
|
custom: {},
|
|
principalId: '',
|
|
projectId: this.$route.query[PROJECT_ID],
|
|
},
|
|
};
|
|
},
|
|
computed: {
|
|
doneLocationOverride() {
|
|
if (this.$route.query[PROJECT_ID]) {
|
|
return {
|
|
name: 'c-cluster-product-resource-id',
|
|
params: {
|
|
resource: MANAGEMENT.PROJECT,
|
|
id: this.$route.query[PROJECT_ID].replace(':', '/')
|
|
}
|
|
};
|
|
}
|
|
|
|
return this.value.listLocation;
|
|
},
|
|
},
|
|
methods: {
|
|
onAdd(principalId) {
|
|
this['principalId'] = principalId;
|
|
},
|
|
async saveOverride() {
|
|
const asyncBindings = this.binding.roleTemplateIds.map((roleTemplateId) => this.$store.dispatch(`management/create`, {
|
|
type: MANAGEMENT.PROJECT_ROLE_TEMPLATE_BINDING,
|
|
roleTemplateName: roleTemplateId,
|
|
principalName: this.member.principalId,
|
|
projectName: this.member.projectId,
|
|
}));
|
|
|
|
const bindings = await Promise.all(asyncBindings);
|
|
|
|
await Promise.all(bindings.map((binding) => binding.save()));
|
|
await this.$store.dispatch(`management/findAll`, { type: MANAGEMENT.PROJECT_ROLE_TEMPLATE_BINDING, opt: { force: true } });
|
|
|
|
this.$router.replace(this.doneLocationOverride);
|
|
}
|
|
}
|
|
};
|
|
|
|
</script>
|
|
|
|
<template>
|
|
<CruResource
|
|
class="cluster-role-template-binding"
|
|
:errors="errors"
|
|
:mode="mode"
|
|
:resource="value"
|
|
:subtypes="[]"
|
|
:can-yaml="false"
|
|
:cancel-event="true"
|
|
:validation-passed="!!binding.principalId && !!binding.projectId"
|
|
@error="e=>errors = e"
|
|
@finish="saveOverride"
|
|
@cancel="done"
|
|
>
|
|
<ProjectMemberEditor v-model:value="binding" />
|
|
</CruResource>
|
|
</template>
|
|
<style lang="scss" scoped>
|
|
label.radio {
|
|
font-size: 16px;
|
|
}
|
|
|
|
.custom-permissions {
|
|
display: grid;
|
|
grid-template-columns: 1fr 1fr 1fr;
|
|
}
|
|
</style>
|