Skip to content
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.

Commit 95a6c6b

Browse files
committedOct 31, 2017
Fix bugzilla 15077030 where deleting a rolebinding for a serviceaccount can delete additional rolebindings for serviceaccounts from another namespace
1 parent 9b48a7b commit 95a6c6b

File tree

5 files changed

+28
-20
lines changed

5 files changed

+28
-20
lines changed
 

‎app/scripts/controllers/membership.js

+3-2
Original file line numberDiff line numberDiff line change
@@ -274,7 +274,8 @@ angular
274274
project: project,
275275
subjectKinds: subjectKinds,
276276
canUpdateRolebindings: canI('rolebindings', 'update', projectName),
277-
confirmRemove: function(subjectName, kindName, roleName) {
277+
confirmRemove: function(subjectName, kindName, roleName, namespace) {
278+
278279
var redirectToProjectList = null;
279280
var modalScope = createModalScope(subjectName, kindName, roleName, $scope.user.metadata.name);
280281
if(_.isEqual(subjectName, $scope.user.metadata.name)) {
@@ -294,7 +295,7 @@ angular
294295
})
295296
.result.then(function() {
296297
RoleBindingsService
297-
.removeSubject(subjectName, roleName, $scope.roleBindings, requestContext)
298+
.removeSubject(subjectName, roleName, namespace, $scope.roleBindings, requestContext)
298299
.then(function(updateRolebinding) {
299300
if(redirectToProjectList) {
300301
$location.url("./");

‎app/scripts/services/membership/roleBindings.js

+11-5
Original file line numberDiff line numberDiff line change
@@ -87,20 +87,26 @@ angular
8787
};
8888

8989
// has to handle multiple bindings or multiple reference to a subject within a single binding
90-
var removeSubject = function(subjectName, role, roleBindings, context) {
91-
var matches = _.filter(roleBindings, {roleRef: {name: role}});
90+
var removeSubject = function(subjectName, role, namespace, roleBindings, context) {
91+
var matchingBindings = _.filter(roleBindings, {roleRef: {name: role}});
92+
9293
return $q.all(
93-
_.map(matches, function(binding) {
94+
_.map(matchingBindings, function(binding) {
9495
var tpl = bindingTPL();
9596
binding = _.extend(tpl, binding);
9697
cleanBinding(binding);
97-
binding.subjects = _.reject(binding.subjects, {name: subjectName});
98+
99+
binding.subjects = _.reject(binding.subjects, {
100+
name: subjectName,
101+
namespace: namespace
102+
});
103+
98104
return binding.subjects.length ?
99105
DataService.update('rolebindings', binding.metadata.name, binding, context) :
100106
DataService.delete('rolebindings', binding.metadata.name, context)
101107
// For a delete, resp is simply a 201 or less useful object.
102108
// Instead, this intercepts the response & returns the binding object
103-
// with the empty .subjects[] list.
109+
// with the empty .subjects[] list.
104110
.then(function() {
105111
return binding;
106112
});

‎app/views/membership.html

+1-1
Original file line numberDiff line numberDiff line change
@@ -113,7 +113,7 @@ <h3>
113113
key="role.metadata.name"
114114
key-help="roleHelp(role)"
115115
show-action="mode.edit"
116-
action="confirmRemove(subject.name, subjectKind.name, role.metadata.name)"
116+
action="confirmRemove(subject.name, subjectKind.name, role.metadata.name, subject.namespace)"
117117
action-title="Remove role {{role.metadata.name}} from {{subject.name}}"></action-chip>
118118
</div>
119119
<div

‎dist/scripts/scripts.js

+12-11
Original file line numberDiff line numberDiff line change
@@ -2514,17 +2514,18 @@ l.subjects.push(n);
25142514
} else l.subjects = [ n ];
25152515
return i(l), t.update("rolebindings", l.metadata.name, l, s);
25162516
},
2517-
removeSubject: function(n, a, o, s) {
2518-
var c = _.filter(o, {
2517+
removeSubject: function(n, a, o, s, c) {
2518+
var l = _.filter(s, {
25192519
roleRef: {
25202520
name: a
25212521
}
25222522
});
2523-
return e.all(_.map(c, function(e) {
2523+
return e.all(_.map(l, function(e) {
25242524
var a = r();
25252525
return e = _.extend(a, e), i(e), e.subjects = _.reject(e.subjects, {
2526-
name: n
2527-
}), e.subjects.length ? t.update("rolebindings", e.metadata.name, e, s) : t.delete("rolebindings", e.metadata.name, s).then(function() {
2526+
name: n,
2527+
namespace: o
2528+
}), e.subjects.length ? t.update("rolebindings", e.metadata.name, e, c) : t.delete("rolebindings", e.metadata.name, c).then(function() {
25282529
return e;
25292530
});
25302531
}));
@@ -5222,20 +5223,20 @@ f = r, P(), k(f), angular.extend(a, {
52225223
project: n,
52235224
subjectKinds: E,
52245225
canUpdateRolebindings: y("rolebindings", "update", g),
5225-
confirmRemove: function(n, r, i) {
5226-
var c = null, l = T(n, r, i, a.user.metadata.name);
5227-
_.isEqual(n, a.user.metadata.name) && u.isLastRole(a.user.metadata.name, a.roleBindings) && (c = !0), o.open({
5226+
confirmRemove: function(n, r, i, c) {
5227+
var l = null, d = T(n, r, i, a.user.metadata.name);
5228+
_.isEqual(n, a.user.metadata.name) && u.isLastRole(a.user.metadata.name, a.roleBindings) && (l = !0), o.open({
52285229
animation: !0,
52295230
templateUrl: "views/modals/confirm.html",
52305231
controller: "ConfirmModalController",
52315232
resolve: {
52325233
modalConfig: function() {
5233-
return l;
5234+
return d;
52345235
}
52355236
}
52365237
}).result.then(function() {
5237-
m.removeSubject(n, i, a.roleBindings, f).then(function(e) {
5238-
c ? t.url("./") : (s.getProjectRules(g, !0).then(function() {
5238+
m.removeSubject(n, i, c, a.roleBindings, f).then(function(e) {
5239+
l ? t.url("./") : (s.getProjectRules(g, !0).then(function() {
52395240
P(e[0]);
52405241
var t = y("rolebindings", "update", g);
52415242
angular.extend(a, {

‎dist/scripts/templates.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -10702,7 +10702,7 @@ angular.module('openshiftConsoleTemplates', []).run(['$templateCache', function(
1070210702
"</div>\n" +
1070310703
"<div class=\"action-set\">\n" +
1070410704
"<div class=\"col-roles\">\n" +
10705-
"<action-chip ng-repeat=\"role in subject.roles\" key=\"role.metadata.name\" key-help=\"roleHelp(role)\" show-action=\"mode.edit\" action=\"confirmRemove(subject.name, subjectKind.name, role.metadata.name)\" action-title=\"Remove role {{role.metadata.name}} from {{subject.name}}\"></action-chip>\n" +
10705+
"<action-chip ng-repeat=\"role in subject.roles\" key=\"role.metadata.name\" key-help=\"roleHelp(role)\" show-action=\"mode.edit\" action=\"confirmRemove(subject.name, subjectKind.name, role.metadata.name, subject.namespace)\" action-title=\"Remove role {{role.metadata.name}} from {{subject.name}}\"></action-chip>\n" +
1070610706
"</div>\n" +
1070710707
"<div ng-if=\"mode.edit\" class=\"col-add-role\">\n" +
1070810708
"<div row>\n" +

0 commit comments

Comments
 (0)
Please sign in to comment.