Procházet zdrojové kódy

[security] Duplicate role name validation

Enrico Berti před 11 roky
rodič
revize
a929ab852d

+ 3 - 2
apps/security/src/security/templates/hive.mako

@@ -297,7 +297,8 @@ ${ layout.menubar(section='hive') }
     <div class="row-fluid">
       <div class="span6">
         <h4>${ _('Name') }</h4>
-        <input type="text" class="input-xlarge" data-bind="value: $data.name" placeholder="${ _('Required') }" style="width: 360px" />
+        <input type="text" class="input-xlarge" data-bind="value: $data.name, valueUpdate: 'afterkeydown', style: {'border-color': $root.role.hasDuplicateName() ? '#b94a48':''}" placeholder="${ _('Required') }" style="width: 360px" />
+        <div style="color: #b94a48;" data-bind="visible: $root.role.hasDuplicateName"><em>${ _('The specified role name already exists.') }</em></div>
       </div>
       <div class="span6">
         <h4>${ _('Groups') }</h4>
@@ -313,7 +314,7 @@ ${ layout.menubar(section='hive') }
   </div>
   <div class="modal-footer">
     <button class="btn" data-dismiss="modal" aria-hidden="true" data-bind="click: $root.role.reset">${ _('Cancel') }</button>
-    <button data-loading-text="${ _('Saving...') }" class="btn btn-primary disable-enter" data-bind="click: $root.role.create">${ _('Save') }</button>
+    <button data-loading-text="${ _('Saving...') }" class="btn btn-primary disable-enter" data-bind="click: $root.role.create, enable: ! $root.role.hasDuplicateName()">${ _('Save') }</button>
   </div>
 </div>
 

+ 10 - 0
apps/security/static/js/hive.ko.js

@@ -127,6 +127,7 @@ var Role = function (vm, role) {
   self.originalPrivileges = ko.observableArray();
   self.showPrivileges = ko.observable(false);
   self.showEditGroups = ko.observable(false);
+  self.hasDuplicateName = ko.observable(false);
 
   self.privilegesChanged = ko.computed(function () {
     return $.grep(self.privileges(), function (privilege) {
@@ -657,6 +658,15 @@ var HiveViewModel = function (initial) {
   // Editing
   self.showCreateRole = ko.observable(false);
   self.role = new Role(self, {});
+  self.role.name.subscribe(function (value){
+    var _found = false;
+    ko.utils.arrayForEach(self.roles(), function (role) {
+      if (role.name() == value){
+        _found = true;
+      }
+    });
+    self.role.hasDuplicateName(_found);
+  });
   self.privilege = new Privilege(self, {});
 
   self.doAs = ko.observable(initial.user);