Index: modules/user/access_control.js
===================================================================
RCS file: modules/user/access_control.js
diff -N modules/user/access_control.js
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ modules/user/access_control.js	16 Aug 2006 13:53:23 -0000
@@ -0,0 +1,27 @@
+// $Id$
+
+if (isJsEnabled()) {
+  addLoadEvent(accessControlAutoAttach);
+}
+
+function accessControlAutoAttach() {
+  var checkboxes = $('permissions').getElementsByTagName('input');
+  for (var i = 0; checkbox = checkboxes[i]; i++) {
+    if (parseInt(checkbox.id.replace(/^edit-(\d+).*$/i, '$1')) == 2) { // authenticated user
+      checkbox.onclick = accessControlToggle;
+      accessControlToggle.apply(checkbox);
+    }
+  }
+}
+
+function accessControlToggle() {
+  var roles = Drupal.settings.user.roles;
+  var name = this.id.substr(7);
+  
+  for (var i in roles) {
+    if (roles[i] > 2) {
+      var checkbox = $('edit-' + roles[i] + '-' + name);
+      checkbox.disabled = checkbox.checked = this.checked;
+    }
+  }
+}
\ No newline at end of file
Index: modules/user/user.module
===================================================================
RCS file: /cvs/drupal/drupal/modules/user/user.module,v
retrieving revision 1.653
diff -u -d -F^s*function -r1.653 user.module
--- modules/user/user.module	14 Aug 2006 20:35:11 -0000	1.653
+++ modules/user/user.module	16 Aug 2006 13:53:29 -0000
@@ -1787,6 +1787,9 @@ function user_admin_perm($str_rids = NUL
   }
   $form['submit'] = array('#type' => 'submit', '#value' => t('Save permissions'));
 
+  drupal_add_js(array('roles' => array_keys($role_names)), 'setting', 'user');
+  drupal_add_js(drupal_get_path('module', 'user') .'/access_control.js', 'module');
+
   return drupal_get_form('user_admin_perm', $form);
 }
 
