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 a1bd60f..21e0b33 100644
--- a/src/app/controllers/application_controller.rb
+++ b/src/app/controllers/application_controller.rb
@@ -299,9 +299,11 @@ class ApplicationController < ActionController::Base
@polymorphic_path_extras = polymorphic_path_extras
@roles = Role.find_all_by_scope((a)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]
@@ -322,13 +324,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((a)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 5327267..b6acf0d 100644
--- a/src/config/locales/en.yml
+++ b/src/config/locales/en.yml
@@ -1214,7 +1214,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