hydra-role-management 0.2.1 → 1.0.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/.circleci/config.yml +88 -0
- data/.github_changelog_generator +2 -0
- data/.gitignore +3 -0
- data/.rspec +2 -0
- data/.rubocop.yml +51 -0
- data/CHANGELOG.md +151 -0
- data/CONTRIBUTING.md +69 -21
- data/Gemfile +42 -9
- data/LICENSE.md +14 -0
- data/README.md +63 -16
- data/Rakefile +15 -17
- data/SUPPORT.md +6 -0
- data/app/controllers/concerns/hydra/role_management/roles_behavior.rb +16 -13
- data/app/controllers/concerns/hydra/role_management/user_roles_behavior.rb +5 -2
- data/app/controllers/roles_controller.rb +3 -1
- data/app/controllers/user_roles_controller.rb +3 -2
- data/app/models/concerns/hydra/role_management/legacy_attribute_handling.rb +3 -0
- data/app/models/concerns/hydra/role_management/user_roles.rb +6 -4
- data/app/models/role.rb +10 -5
- data/app/views/roles/edit.html.erb +10 -10
- data/app/views/roles/index.html.erb +2 -2
- data/app/views/roles/new.html.erb +3 -3
- data/app/views/roles/show.html.erb +7 -7
- data/config/locales/role-management.en.yml +28 -0
- data/config/locales/role-management.es.yml +28 -0
- data/config/routes.rb +3 -2
- data/hydra-role-management.gemspec +22 -13
- data/lib/generators/roles/roles_generator.rb +40 -59
- data/lib/generators/roles/templates/hydra_role_management_rails3.rb +3 -1
- data/lib/generators/roles/templates/migrations/user_roles.rb +6 -4
- data/lib/hydra-role-management.rb +10 -3
- data/lib/hydra/role_management.rb +5 -2
- data/lib/hydra/role_management/version.rb +3 -1
- data/spec/controllers/roles_controller_spec.rb +39 -44
- data/spec/controllers/user_roles_controller_spec.rb +20 -20
- data/spec/lib/user_roles_spec.rb +21 -22
- data/spec/models/role_spec.rb +22 -21
- data/spec/routing/role_management_routes_spec.rb +29 -45
- data/spec/spec_helper.rb +14 -5
- data/spec/test_app_templates/app/models/sample.rb +8 -8
- data/spec/test_app_templates/app/models/solr_document.rb +3 -2
- data/spec/test_app_templates/config/initializers/hydra_config.rb +7 -6
- data/spec/test_app_templates/lib/generators/test_app_generator.rb +9 -12
- metadata +119 -13
- data/.travis.yml +0 -18
data/Gemfile
CHANGED
@@ -1,15 +1,48 @@
|
|
1
|
-
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
source 'https://rubygems.org'
|
4
|
+
|
5
|
+
gem 'coveralls', require: false
|
2
6
|
|
3
7
|
gemspec
|
4
8
|
|
5
|
-
|
9
|
+
# BEGIN ENGINE_CART BLOCK
|
10
|
+
# engine_cart: 1.1.0
|
11
|
+
# engine_cart stanza: 0.10.0
|
12
|
+
# the below comes from engine_cart, a gem used to test this Rails engine gem
|
13
|
+
# in the context of a Rails app.
|
14
|
+
file = File.expand_path('Gemfile', ENV['ENGINE_CART_DESTINATION'] ||
|
15
|
+
ENV['RAILS_ROOT'] || File.expand_path('.internal_test_app',
|
16
|
+
File.dirname(__FILE__)))
|
17
|
+
if File.exist?(file)
|
18
|
+
begin
|
19
|
+
eval_gemfile file
|
20
|
+
rescue Bundler::GemfileError => e
|
21
|
+
Bundler.ui.warn '[EngineCart] Skipping Rails application dependencies:'
|
22
|
+
Bundler.ui.warn e.message
|
23
|
+
end
|
24
|
+
else
|
25
|
+
Bundler.ui.warn "[EngineCart] Unmet dependencies in #{file}," \
|
26
|
+
' using placeholder dependencies'
|
6
27
|
|
7
|
-
|
8
|
-
|
9
|
-
gem '
|
28
|
+
if ENV['RAILS_VERSION']
|
29
|
+
if ENV['RAILS_VERSION'] == 'edge'
|
30
|
+
gem 'rails', github: 'rails/rails'
|
31
|
+
ENV['ENGINE_CART_RAILS_OPTIONS'] = '--edge --skip-turbolinks'
|
32
|
+
else
|
33
|
+
gem 'rails', ENV['RAILS_VERSION']
|
34
|
+
end
|
35
|
+
end
|
10
36
|
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
37
|
+
case ENV['RAILS_VERSION']
|
38
|
+
when /^4.2/
|
39
|
+
gem 'coffee-rails', '~> 4.1.0'
|
40
|
+
gem 'responders', '~> 2.0'
|
41
|
+
gem 'sass-rails', '>= 5.0'
|
42
|
+
when /^4.[01]/
|
43
|
+
gem 'sass-rails', '< 5.0'
|
44
|
+
when /^5.[12]/
|
45
|
+
gem 'sass-rails', '~> 5.0'
|
46
|
+
end
|
15
47
|
end
|
48
|
+
# END ENGINE_CART BLOCK
|
data/LICENSE.md
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
Copyright 2015 Data Curation Experts
|
2
|
+
Additional copyright may be held by others, as reflected in the commit history.
|
3
|
+
|
4
|
+
Licensed under the Apache License, Version 2.0 (the "License");
|
5
|
+
you may not use this file except in compliance with the License.
|
6
|
+
You may obtain a copy of the License at
|
7
|
+
|
8
|
+
http://www.apache.org/licenses/LICENSE-2.0
|
9
|
+
|
10
|
+
Unless required by applicable law or agreed to in writing, software
|
11
|
+
distributed under the License is distributed on an "AS IS" BASIS,
|
12
|
+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
13
|
+
See the License for the specific language governing permissions and
|
14
|
+
limitations under the License.
|
data/README.md
CHANGED
@@ -1,27 +1,74 @@
|
|
1
|
-
|
1
|
+
# hydra-role-management
|
2
2
|
|
3
|
-
|
3
|
+
Code: [![CircleCI](https://circleci.com/gh/samvera/hydra-role-management.svg?style=svg)](https://circleci.com/gh/samvera/hydra-role-management) [![Gem Version](https://badge.fury.io/rb/hydra-role-management.svg)](https://badge.fury.io/rb/hydra-role-management) [![Coverage Status](https://coveralls.io/repos/github/samvera/hydra-role-management/badge.svg?branch=master)](https://coveralls.io/github/samvera/hydra-role-management?branch=master)
|
4
4
|
|
5
|
-
|
5
|
+
Docs: [![Contribution Guidelines](http://img.shields.io/badge/CONTRIBUTING-Guidelines-blue.svg)](./CONTRIBUTING.md) [![Apache 2.0 License](http://img.shields.io/badge/APACHE2-license-blue.svg)](./LICENSE.md)
|
6
6
|
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
7
|
+
Jump In: [![Slack Status](http://slack.samvera.org/badge.svg)](http://slack.samvera.org/)
|
8
|
+
|
9
|
+
# What is hydra-role-management?
|
10
|
+
|
11
|
+
An engine gem to provide a RDBMS backed list of roles and their associated user. This replaces the hydra default role mapper.
|
12
|
+
|
13
|
+
As of version 1.0, this gem only supports Rails 5.
|
14
|
+
|
15
|
+
## Product Owner & Maintenance
|
16
|
+
|
17
|
+
**hydra-role-management** is a Core Component of the Samvera community. The documentation for what this means can be found [here](http://samvera.github.io/core_components.html#requirements-for-a-core-component).
|
18
|
+
|
19
|
+
### Product Owner
|
20
|
+
|
21
|
+
[jrgriffiniii](https://github.com/jrgriffiniii)
|
22
|
+
|
23
|
+
# Help
|
24
|
+
|
25
|
+
The Samvera community is here to help. Please see our [support guide](./SUPPORT.md).
|
26
|
+
|
27
|
+
## Installing:
|
28
|
+
|
29
|
+
- Add: `gem 'hydra-role-management'` to your Gemfile and then `bundle install`
|
30
|
+
- `rails generate roles`
|
31
|
+
- `rake db:migrate`
|
32
|
+
- Add the following [cancan](https://github.com/ryanb/cancan) abilities:
|
11
33
|
|
12
34
|
```
|
13
35
|
# app/models/ability.rb
|
14
36
|
if current_user.admin?
|
15
|
-
can [:create, :show, :add_user, :remove_user, :index], Role
|
37
|
+
can [:create, :show, :add_user, :remove_user, :index, :edit, :update, :destroy], Role
|
16
38
|
end
|
17
39
|
```
|
18
40
|
|
19
|
-
##Testing:
|
20
|
-
|
41
|
+
## Testing:
|
42
|
+
|
43
|
+
- Install a system javascript runtime or uncomment therubyracer in spec/support/Gemfile
|
44
|
+
- Ensure that the testing app does not exist: `bundle exec rake engine_cart:clean`
|
45
|
+
- Set Rails version you want to test against. For example:
|
46
|
+
|
47
|
+
- `export RAILS_VERSION=5.1.4`
|
48
|
+
|
49
|
+
- Ensure that the correct version of Rails is installed: `bundle update`
|
50
|
+
|
51
|
+
- Build test app: `bundle exec rake engine_cart:generate`
|
52
|
+
|
53
|
+
- And run tests: `bundle exec rake ci`
|
54
|
+
|
55
|
+
## Releasing
|
56
|
+
|
57
|
+
1. `bundle install`
|
58
|
+
2. Increase the version number in `lib/hydra/role_management/version.rb`
|
59
|
+
3. Increase the same version number in `.github_changelog_generator`
|
60
|
+
4. Update `CHANGELOG.md` by running this command:
|
61
|
+
|
62
|
+
```
|
63
|
+
github_changelog_generator --user samvera --project hydra-role-management --token YOUR_GITHUB_TOKEN_HERE
|
64
|
+
```
|
65
|
+
|
66
|
+
5. Commit these changes to the master branch
|
67
|
+
|
68
|
+
6. Run `rake release`
|
69
|
+
|
70
|
+
# Acknowledgments
|
71
|
+
|
72
|
+
This software has been developed by and is brought to you by the Samvera community. Learn more at the [Samvera website](http://samvera.org/).
|
21
73
|
|
22
|
-
|
23
|
-
* Ensure that the testing app does not exist: ```bundle exec rake clean```
|
24
|
-
* Set Rails version you want to test against. For example:
|
25
|
-
* ```RAILS_VERSION=3.2.13``` or ```RAILS_VERSION=4.0.0```
|
26
|
-
* Ensure that the correct version of Rails is installed: ```bundle update```
|
27
|
-
* Build test app and run tests: ```bundle exec rake spec```
|
74
|
+
![Samvera Logo](https://wiki.duraspace.org/download/thumbnails/87459292/samvera-fall-font2-200w.png?version=1&modificationDate=1498550535816&api=v2)
|
data/Rakefile
CHANGED
@@ -1,23 +1,21 @@
|
|
1
1
|
#!/usr/bin/env rake
|
2
|
-
|
3
|
-
require "bundler/gem_tasks"
|
2
|
+
# frozen_string_literal: true
|
4
3
|
|
5
|
-
require '
|
4
|
+
require 'bundler/setup'
|
5
|
+
require 'bundler/gem_tasks'
|
6
6
|
require 'engine_cart/rake_task'
|
7
|
+
require 'rspec/core/rake_task'
|
8
|
+
require 'rubocop/rake_task'
|
7
9
|
|
10
|
+
desc 'Run style checker'
|
11
|
+
RuboCop::RakeTask.new(:rubocop) do |task|
|
12
|
+
task.fail_on_error = true
|
13
|
+
end
|
8
14
|
|
9
|
-
desc '
|
10
|
-
task :
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
task :ci => [:clean, :generate, :spec]
|
15
|
-
|
16
|
-
desc "Run the tests"
|
17
|
-
RSpec::Core::RakeTask.new(:spec)
|
18
|
-
|
19
|
-
desc "Create the test rails app"
|
20
|
-
task :generate => 'engine_cart:generate'
|
15
|
+
desc 'Run the tests'
|
16
|
+
task ci: [:rubocop, 'engine_cart:generate'] do
|
17
|
+
RSpec::Core::RakeTask.new(:spec)
|
18
|
+
Rake::Task['spec'].invoke
|
19
|
+
end
|
21
20
|
|
22
|
-
|
23
|
-
task :clean => 'engine_cart:clean'
|
21
|
+
task default: :ci
|
data/SUPPORT.md
ADDED
@@ -0,0 +1,6 @@
|
|
1
|
+
If you would like to report an issue, first search [the list of issues](https://github.com/samvera/hydra-role-management/issues/) to see if someone else has already reported it, and then feel free to [create a new issue](https://github.com/samvera/hydra-role-management/issues/new).
|
2
|
+
|
3
|
+
If you have questions or need help, please email [the Samvera community tech list](https://groups.google.com/forum/#!forum/samvera-tech) or stop by the #dev channel in [the Samvera community Slack team](https://wiki.duraspace.org/pages/viewpage.action?pageId=87460391#Getintouch!-Slack).
|
4
|
+
|
5
|
+
You can learn more about the various Samvera communication channels on the [Get in touch!](https://wiki.duraspace.org/pages/viewpage.action?pageId=87460391) wiki page.
|
6
|
+
|
@@ -1,46 +1,49 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module Hydra
|
2
4
|
module RoleManagement
|
5
|
+
# Module defining Controller actions for creating and managing Roles
|
3
6
|
module RolesBehavior
|
4
7
|
extend ActiveSupport::Concern
|
5
8
|
|
6
9
|
included do
|
7
|
-
load_and_authorize_resource
|
10
|
+
load_and_authorize_resource
|
8
11
|
end
|
9
12
|
|
10
|
-
def index
|
11
|
-
end
|
13
|
+
def index; end
|
12
14
|
|
13
15
|
def show
|
14
16
|
redirect_to role_management.edit_role_path(@role) if can? :edit, @role
|
15
17
|
end
|
16
18
|
|
17
|
-
def new
|
18
|
-
end
|
19
|
+
def new; end
|
19
20
|
|
20
|
-
def edit
|
21
|
-
end
|
21
|
+
def edit; end
|
22
22
|
|
23
23
|
def create
|
24
24
|
@role = Role.new(role_params)
|
25
25
|
if @role.save
|
26
|
-
redirect_to role_management.edit_role_path(@role),
|
26
|
+
redirect_to role_management.edit_role_path(@role),
|
27
|
+
notice: 'Role was successfully created.'
|
27
28
|
else
|
28
|
-
render action:
|
29
|
+
render action: 'new'
|
29
30
|
end
|
30
31
|
end
|
31
32
|
|
32
33
|
def update
|
33
34
|
@role = Role.find(params[:id])
|
34
35
|
if @role.update_attributes(role_params)
|
35
|
-
redirect_to role_management.edit_role_path(@role),
|
36
|
+
redirect_to role_management.edit_role_path(@role),
|
37
|
+
notice: 'Role was successfully updated.'
|
36
38
|
else
|
37
|
-
render action:
|
39
|
+
render action: 'edit'
|
38
40
|
end
|
39
41
|
end
|
40
42
|
|
41
43
|
def destroy
|
42
|
-
if
|
43
|
-
redirect_to role_management.roles_path,
|
44
|
+
if @role.destroy
|
45
|
+
redirect_to role_management.roles_path,
|
46
|
+
notice: 'Role was successfully deleted.'
|
44
47
|
else
|
45
48
|
redirect_to role_management.roles_path
|
46
49
|
end
|
@@ -1,5 +1,8 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module Hydra
|
2
4
|
module RoleManagement
|
5
|
+
# Module defining Controller actions for adding and managing Roles for Users
|
3
6
|
module UserRolesBehavior
|
4
7
|
extend ActiveSupport::Concern
|
5
8
|
|
@@ -15,7 +18,8 @@ module Hydra
|
|
15
18
|
u.save!
|
16
19
|
redirect_to role_management.role_path(@role)
|
17
20
|
else
|
18
|
-
redirect_to role_management.role_path(@role),
|
21
|
+
redirect_to role_management.role_path(@role),
|
22
|
+
flash: { error: "Invalid user #{params[:user_key]}" }
|
19
23
|
end
|
20
24
|
end
|
21
25
|
|
@@ -37,4 +41,3 @@ module Hydra
|
|
37
41
|
end
|
38
42
|
end
|
39
43
|
end
|
40
|
-
|
@@ -1,30 +1,32 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module Hydra
|
2
4
|
module RoleManagement
|
5
|
+
# Module offering methods for user behavior managing roles and groups
|
3
6
|
module UserRoles
|
4
7
|
extend ActiveSupport::Concern
|
8
|
+
|
5
9
|
included do
|
6
10
|
has_and_belongs_to_many :roles
|
7
11
|
end
|
8
12
|
|
9
13
|
def groups
|
10
14
|
g = roles.map(&:name)
|
11
|
-
g += ['registered'] unless new_record? || guest?
|
15
|
+
g += ['registered'] unless new_record? || guest?
|
12
16
|
g
|
13
17
|
end
|
14
18
|
|
15
19
|
def guest?
|
16
20
|
if defined?(DeviseGuests)
|
17
|
-
|
21
|
+
self[:guest]
|
18
22
|
else
|
19
23
|
false
|
20
24
|
end
|
21
25
|
end
|
22
|
-
|
23
26
|
|
24
27
|
def admin?
|
25
28
|
roles.where(name: 'admin').exists?
|
26
29
|
end
|
27
|
-
|
28
30
|
end
|
29
31
|
end
|
30
32
|
end
|
data/app/models/role.rb
CHANGED
@@ -1,9 +1,14 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# Class modeling Roles within the application
|
1
4
|
class Role < ActiveRecord::Base
|
2
5
|
has_and_belongs_to_many :users
|
3
6
|
|
4
|
-
validates :name,
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
7
|
+
validates :name,
|
8
|
+
uniqueness: true,
|
9
|
+
format: {
|
10
|
+
with: /\A[a-zA-Z0-9._-]+\z/,
|
11
|
+
message: 'Only letters, numbers, hyphens, ' \
|
12
|
+
'underscores and periods are allowed'
|
13
|
+
}
|
9
14
|
end
|
@@ -1,26 +1,26 @@
|
|
1
|
-
<h2
|
1
|
+
<h2><%= t('role-management.edit.title') %></h2>
|
2
2
|
<%= bootstrap_form_for @role, :url=>role_management.role_path(@role) do |f| %>
|
3
|
-
<%= f.text_field :name, :label=> '
|
3
|
+
<%= f.text_field :name, :label=> t('role-management.edit.field_name') %>
|
4
4
|
|
5
|
-
<%= f.submit
|
5
|
+
<%= f.submit t('role-management.edit.update') %>
|
6
6
|
|
7
7
|
<% end %>
|
8
8
|
<% if can? :destroy, Role %>
|
9
|
-
<%= button_to
|
9
|
+
<%= button_to t('role-management.edit.delete'), role_management.role_path(@role), :method=>:delete, :class=>'btn btn-danger' %>
|
10
10
|
<% end %>
|
11
|
-
<h3
|
11
|
+
<h3><%= t('role-management.edit.accounts') %></h3>
|
12
12
|
<ul>
|
13
13
|
<% @role.users.each do |user| %>
|
14
14
|
<li><%= user.user_key %>
|
15
15
|
<% if can? :remove_user, Role %>
|
16
|
-
<%= button_to
|
16
|
+
<%= button_to t('role-management.edit.remove'), role_management.role_user_path(@role, user.id), :method=>:delete, :class=>'btn btn-danger' %>
|
17
17
|
<% end %>
|
18
18
|
</li>
|
19
19
|
<% end %>
|
20
20
|
</ul>
|
21
|
-
<h3
|
21
|
+
<h3><%= t('role-management.edit.add_new_account') %></h3>
|
22
22
|
<%= bootstrap_form_tag :url=> role_management.role_users_path(@role) do |f| %>
|
23
|
-
<%= f.text_field 'user_key', :label=>'
|
24
|
-
<%= f.submit
|
25
|
-
<%= link_to
|
23
|
+
<%= f.text_field 'user_key', :label=>t('role-management.edit.user') %>
|
24
|
+
<%= f.submit t('role-management.edit.add') %>
|
25
|
+
<%= link_to t('role-management.edit.cancel'), role_management.roles_path, :class => 'btn btn-default' %>
|
26
26
|
<% end %>
|
@@ -1,4 +1,4 @@
|
|
1
|
-
<h2
|
1
|
+
<h2><%= t('role-management.index.title') %></h2>
|
2
2
|
<ul>
|
3
3
|
<% @roles.each do |role| %>
|
4
4
|
<li><%=link_to role.name, role_management.role_path(role) %></li>
|
@@ -6,6 +6,6 @@
|
|
6
6
|
</ul>
|
7
7
|
|
8
8
|
<% if can? :create, Role %>
|
9
|
-
<%= button_to
|
9
|
+
<%= button_to t('role-management.index.create'), role_management.new_role_path, method: :get, class: 'btn btn-primary' %>
|
10
10
|
<% end %>
|
11
11
|
|
@@ -1,6 +1,6 @@
|
|
1
1
|
<%= bootstrap_form_for @role, :url=>role_management.roles_path do |f| %>
|
2
|
-
<%= f.text_field :name, :label=> '
|
3
|
-
<%= f.submit
|
4
|
-
<%= link_to
|
2
|
+
<%= f.text_field :name, :label=> t('role-management.new.field_name') %>
|
3
|
+
<%= f.submit t('role-management.new.add') %>
|
4
|
+
<%= link_to t('role-management.new.cancel'), role_management.roles_path, :class => 'btn btn-default' %>
|
5
5
|
<% end %>
|
6
6
|
|