[PATCH conductor 2/3] redmine task #3157: UI to show inherited permissions

Scott Seago sseago at redhat.com
Thu May 3 14:25:55 UTC 2012


https://www.aeolusproject.org/redmine/issues/3157
---
 src/app/controllers/application_controller.rb    |   15 +++++++++++++--
 src/app/views/permissions/_permissions.html.haml |   22 +++++++++++++++-------
 src/config/locales/en.yml                        |    4 ++++
 src/features/permission.feature                  |    7 +++++++
 4 files changed, 39 insertions(+), 9 deletions(-)

diff --git a/src/app/controllers/application_controller.rb b/src/app/controllers/application_controller.rb
index 9b89d0e..cbdbd94 100644
--- a/src/app/controllers/application_controller.rb
+++ b/src/app/controllers/application_controller.rb
@@ -298,9 +298,11 @@ class ApplicationController < ActionController::Base
     @polymorphic_path_extras = polymorphic_path_extras
     @roles = Role.find_all_by_scope(@permission_object.class.name)
     set_permissions_header
+    @inline = true
   end
 
   def add_permissions_tab(perm_obj, path_prefix = '', polymorphic_path_extras = {})
+    @inline = false
     @path_prefix = path_prefix
     @polymorphic_path_extras = polymorphic_path_extras
     if "permissions" == params[:details_tab]
@@ -321,13 +323,22 @@ class ApplicationController < ActionController::Base
   end
 
   def set_permissions_header
-    @permission_list_header = [
-      { :name => 'checkbox', :class => 'checkbox', :sortable => false },
+    @show_inherited = params[:show_inherited]
+    @permission_list_header = []
+    unless @show_inherited
+      @permission_list_header <<
+        { :name => 'checkbox', :class => 'checkbox', :sortable => false }
+    end
+    @permission_list_header += [
       { :name => t('users.index.username') },
       { :name => t('users.index.last_name'), :sortable => false },
       { :name => t('users.index.first_name'), :sortable => false },
       { :name => t("role"), :sort_attr => :role},
     ]
+    if @show_inherited
+      @permission_list_header <<
+        { :name => t('permissions.inherited_from'), :sortable => false }
+    end
   end
 
   def set_locale
diff --git a/src/app/views/permissions/_permissions.html.haml b/src/app/views/permissions/_permissions.html.haml
index dec5af7..d4ac784 100644
--- a/src/app/views/permissions/_permissions.html.haml
+++ b/src/app/views/permissions/_permissions.html.haml
@@ -1,5 +1,5 @@
 - content_for :form_header do
-  - if check_privilege(Privilege::PERM_SET)
+  - if not(@show_inherited) && check_privilege(Privilege::PERM_SET)
     %li= link_to t('permissions.form.grant_access'), new_permission_path(:permission_object_type => @permission_object.class.name, :permission_object_id => @permission_object.id, :path_prefix => @path_prefix, :use_tabs => @use_tabs ? @use_tabs : (@tabs ? 'yes' : 'no')), { :class => 'button primary', :id => 'new_permission_button'}
     %li= restful_submit_tag t('permissions.revoke_access'), "destroy", multi_destroy_permissions_path, 'DELETE', :id => 'revoke_button', :class => 'button danger'
     %li= restful_submit_tag t('edit'), "multi_update", multi_update_permissions_path, 'POST', :id => 'perm_edit_button', :class => 'hidden'
@@ -12,20 +12,28 @@
 
     = hidden_field_tag :path_prefix, @path_prefix
     = hidden_field_tag :use_tabs, @use_tabs ? @use_tabs : (@tabs ? 'yes' : 'no')
+  %span{:id => ("tab-container-1-nav" unless @inline)}
+    - if @show_inherited
+      %li= link_to t('permissions.direct_access'), params.merge(:show_inherited => false), { :class => 'button primary', :id => 'inherited_permission_button'}
+    - else
+      %li= link_to t('permissions.inherited_access'), params.merge(:show_inherited => true), { :class => 'button primary', :id => 'inherited_permission_button'}
 
-= filter_table(@permission_list_header, @permission_object.permissions) do |permission|
+= filter_table(@permission_list_header, @show_inherited ? @permission_object.derived_permissions : @permission_object.permissions) do |permission|
   %tr{:class => cycle('nostripe','stripe')}
-    %td{:class => 'checkbox'}
-      - if check_privilege(Privilege::PERM_SET)
-        - selected = params[:select] == 'all'
-        = check_box_tag "permission_selected[]", permission.id, selected, :id => "permission_checkbox_#{permission.id}"
+    - if not(@show_inherited)
+      %td{:class => 'checkbox'}
+        - if check_privilege(Privilege::PERM_SET)
+          - selected = params[:select] == 'all'
+          = check_box_tag "permission_selected[]", permission.id, selected, :id => "permission_checkbox_#{permission.id}"
     %td= link_to permission.user.login, user_path(permission.user)
     %td= permission.user.last_name
     %td= permission.user.first_name
-    - if check_privilege(Privilege::PERM_SET)
+    - if not(@show_inherited) && check_privilege(Privilege::PERM_SET)
       %td= select_tag "permission_role_selected[]", options_for_select(@roles.map {|r| [ t(r.name, :scope=> :role_defs, :default => r.name), "#{permission.id},#{r.id}" ] }, :selected => "#{permission.id},#{permission.role.id}", :disabled => @permission_object.permissions.where(["user_id = ? and role_id != ?", permission.user_id, permission.role_id]).collect {|p| "#{permission.id},#{p.role.id}"}), :id => "permission_role_selected_#{permission.id}"
       :javascript
         $("#permission_role_selected_#{permission.id}").change(function () { $("#perm_edit_button").click(); } );
 
     -else
       %td= t(permission.role.name, :scope=> :role_defs, :default => permission.role.name)
+    - if @show_inherited
+      %td= (permission.permission.permission_object.class == BasePermissionObject) ? t('permission.global') : permission.permission.permission_object.name
diff --git a/src/config/locales/en.yml b/src/config/locales/en.yml
index 6bee3f4..9ca9bcd 100644
--- a/src/config/locales/en.yml
+++ b/src/config/locales/en.yml
@@ -1196,7 +1196,11 @@ en:
     my_account: My Account
     logout: Log out
   permissions:
+    direct_access: "Direct Access"
+    inherited_access: "Inherited Access"
+    inherited_from: "Inherited From"
     revoke_access: "Revoke Access"
+    global: "Global"
     form:
       grant_access: Grant Access
     new:
diff --git a/src/features/permission.feature b/src/features/permission.feature
index abdd5ab..e5d6881 100644
--- a/src/features/permission.feature
+++ b/src/features/permission.feature
@@ -55,3 +55,10 @@ Feature: Manage Permissions
     When I delete the permission
     Then I should be on the page for the pool "PermissionPool"
     And I should see "Deleted the following Permission Grants"
+
+  Scenario: View inherited permissions
+    Given I am viewing the pool "PermissionPool"
+    When I follow link with ID "details_permissions"
+    When I follow "Inherited Access"
+    Then I should see "Inherited From"
+    And I should see "Global Administrator"
-- 
1.7.6.5




More information about the aeolus-devel mailing list