Fix adding member issue

https://github.com/rancher/rancher/issues/16320
This commit is contained in:
loganhz 2018-10-30 07:14:44 +08:00
parent ab0e965819
commit d3ae679dbd
7 changed files with 15 additions and 59 deletions

View File

@ -2,7 +2,6 @@ import Controller from '@ember/controller';
import NewOrEdit from 'ui/mixins/new-or-edit'; import NewOrEdit from 'ui/mixins/new-or-edit';
import { get } from '@ember/object'; import { get } from '@ember/object';
// import { all as PromiseAll } from 'rsvp'; // import { all as PromiseAll } from 'rsvp';
import { computed } from '@ember/object';
const ROLE_KINDS = [ const ROLE_KINDS = [
{ id: 'User', }, { id: 'User', },
@ -18,14 +17,9 @@ const ROLE_KINDS = [
export default Controller.extend(NewOrEdit, { export default Controller.extend(NewOrEdit, {
primaryResource: null, primaryResource: null,
kinds: ROLE_KINDS, kinds: ROLE_KINDS,
defaultUser: null,
actions: { actions: {
doneSaving() { doneSaving() {
this.transitionToRoute('authenticated.cluster.security.members.index', get(this, 'model.cluster.id')) this.transitionToRoute('authenticated.cluster.security.members.index', get(this, 'model.cluster.id'))
}, },
}, },
filteredUsers: computed('model.users.@each.{id,state}', function() {
return get(this, 'model.users').filter((u) => !u.hasOwnProperty('me') || get(u, 'me') === false)
.sortBy('username');
}),
}); });

View File

@ -14,17 +14,9 @@ export default Route.extend({
const cid = this.paramsFor('authenticated.cluster'); const cid = this.paramsFor('authenticated.cluster');
return hash({ return hash({
cluster: gs.find('cluster', cid.cluster_id, { forceReload: true }), cluster: gs.find('cluster', cid.cluster_id, { forceReload: true }),
roles: get(this, 'roleTemplateService').get('allFilteredRoleTemplates'), roles: get(this, 'roleTemplateService').get('allFilteredRoleTemplates'),
users: gs.findAll('user'), roleBindings: gs.findAll('clusterRoleTemplateBinding'),
}); });
}, },
setupController(controller, model) {
this._super(controller, model);
let dfu = get(model, 'users.firstObject');
controller.setProperties({ defaultUser: dfu, });
},
}); });

View File

@ -8,8 +8,6 @@
<div class="box mt-30"> <div class="box mt-30">
{{form-scoped-roles {{form-scoped-roles
model=model model=model
filtered=filteredUsers
defaultUser=defaultUser
type="cluster" type="cluster"
cancel=(action "doneSaving") cancel=(action "doneSaving")
doneSaving=(action "doneSaving") doneSaving=(action "doneSaving")

View File

@ -1,7 +1,6 @@
import Controller from '@ember/controller'; import Controller from '@ember/controller';
import NewOrEdit from 'ui/mixins/new-or-edit'; import NewOrEdit from 'ui/mixins/new-or-edit';
import { get } from '@ember/object'; import { get } from '@ember/object';
import { computed } from '@ember/object';
const ROLE_KINDS = [ const ROLE_KINDS = [
{ id: 'User', }, { id: 'User', },
@ -22,8 +21,4 @@ export default Controller.extend(NewOrEdit, {
this.transitionToRoute('authenticated.project.security.members.index', get(this, 'model.project.id')) this.transitionToRoute('authenticated.project.security.members.index', get(this, 'model.project.id'))
}, },
}, },
filteredUsers: computed('model.users.@each.{id,state}', function() {
return get(this, 'model.users').filter((u) => !u.hasOwnProperty('me') || get(u, 'me') === false)
.sortBy('username');
}),
}); });

View File

@ -12,17 +12,9 @@ export default Route.extend({
const pid = this.paramsFor('authenticated.project'); const pid = this.paramsFor('authenticated.project');
return hash({ return hash({
project: gs.find('project', pid.project_id, { forceReload: true }), project: gs.find('project', pid.project_id, { forceReload: true }),
roles: get(this, 'roleTemplateService').get('allFilteredRoleTemplates'), roles: get(this, 'roleTemplateService').get('allFilteredRoleTemplates'),
users: gs.findAll('user'), roleBindings: gs.findAll('projectRoleTemplateBinding'),
}); });
}, }
setupController(controller, model) {
this._super(controller, model);
let dfu = get(model, 'users.firstObject');
controller.setProperties({ defaultUser: dfu, });
},
}); });

View File

@ -8,8 +8,6 @@
<div class="box mt-30"> <div class="box mt-30">
{{form-scoped-roles {{form-scoped-roles
model=model model=model
filtered=filteredUsers
defaultUser=defaultUser
type="project" type="project"
cancel=(action "doneSaving") cancel=(action "doneSaving")
doneSaving=(action "doneSaving") doneSaving=(action "doneSaving")

View File

@ -27,14 +27,12 @@ export default Component.extend(NewOrEdit, {
init() { init() {
this._super(...arguments); this._super(...arguments);
let dfu = get(this, 'defaultUser');
let model = { type: `${ get(this, 'type') }RoleTemplateBinding`, }; let model = { type: `${ get(this, 'type') }RoleTemplateBinding`, };
set(model, `${ get(this, 'type') }Id`, get(this, `model.${ get(this, 'type') }.id`)) set(model, `${ get(this, 'type') }Id`, get(this, `model.${ get(this, 'type') }.id`))
setProperties(this, { setProperties(this, {
primaryResource: this.make(model), primaryResource: this.make(model),
defaultUser: dfu,
stdUser: `${ get(this, 'type') }-member`, stdUser: `${ get(this, 'type') }-member`,
admin: `${ get(this, 'type') }-owner`, admin: `${ get(this, 'type') }-owner`,
cTyped: get(this, 'type').capitalize(), cTyped: get(this, 'type').capitalize(),
@ -214,26 +212,17 @@ export default Component.extend(NewOrEdit, {
}); });
}), }),
mode: computed('editing', 'defaultUser', { mode: computed('editing', {
get() { get() {
let editing = get(this, 'editing');
let dfu = get(this, 'defaultUser');
let current = dfu.get(`${ get(this, 'type') }RoleBindings`);
let mode = null; let mode = null;
if (editing && current.length === 1) { const id = `${ get(this, 'type') }-member`;
mode = get(current, 'firstObject.roleTemplateId'); const role = get(this, 'model.roles').findBy('id', id);
} else if (editing && current.length > 1){
mode = CUSTOM;
} else {
const id = `${ get(this, 'type') }-member`;
const role = get(this, 'model.roles').findBy('id', id);
if ( role && get(role, 'locked') !== true ) { if ( role && get(role, 'locked') !== true ) {
mode = `${ get(this, 'type') }-member`; mode = `${ get(this, 'type') }-member`;
} else { } else {
mode = CUSTOM; mode = CUSTOM;
}
} }
return mode; return mode;
@ -277,9 +266,7 @@ export default Component.extend(NewOrEdit, {
return false; return false;
} }
const user = get(this, 'model.users').find((user) => (get(user, 'principalIds') || []).indexOf(get(principal, 'id')) > -1 ); const current = (get(this, 'model.roleBindings') || []).filterBy('userPrincipalId', get(principal, 'id'));
const current = user.get(`${ get(this, 'type') }RoleBindings`);
if (get(this, 'mode') === 'custom') { if (get(this, 'mode') === 'custom') {
if (get(this, 'customToAdd.length') < 1) { if (get(this, 'customToAdd.length') < 1) {