ecm_user_area 0.0.1.pre → 1.0.0.pre
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/app/admin/roles.rb +40 -0
- data/app/admin/user_roles.rb +27 -0
- data/app/admin/users.rb +55 -17
- data/app/controllers/ecm/user_area/registrations_controller.rb +22 -0
- data/app/models/role.rb +37 -0
- data/app/models/user.rb +20 -1
- data/app/models/user_role.rb +30 -0
- data/app/services/ecm/user_area/role_collector.rb +14 -0
- data/app/views/ecm/user_area/registrations/edit.de.html.erb +25 -0
- data/config/locales/de.yml +34 -0
- data/config/locales/en.yml +33 -0
- data/db/migrate/002_create_roles.rb +12 -0
- data/db/migrate/003_create_user_roles.rb +14 -0
- data/lib/ecm/user_area/configuration.rb +6 -2
- data/lib/ecm/user_area/roles.rb +17 -0
- data/lib/ecm/user_area/version.rb +2 -2
- data/lib/ecm_user_area.rb +8 -0
- data/lib/generators/ecm/user_area/install/templates/ecm_user_area.rb +1 -1
- data/lib/rbac/role/base.rb +27 -0
- data/lib/rbac/role/enumerator.rb +16 -0
- data/lib/rbac/role_enumerator.rb +14 -0
- data/lib/tasks/ecm_user_area_tasks.rake +6 -4
- metadata +56 -31
data/app/admin/roles.rb
ADDED
@@ -0,0 +1,40 @@
|
|
1
|
+
ActiveAdmin.register Role do
|
2
|
+
# menu entry settings
|
3
|
+
menu :parent => Proc.new { I18n.t('ecm.user_area.active_admin.menu') }.call
|
4
|
+
|
5
|
+
index do
|
6
|
+
column :name
|
7
|
+
column :namespace
|
8
|
+
column :identifier
|
9
|
+
column :enabled
|
10
|
+
column :description
|
11
|
+
column :created_at
|
12
|
+
column :updated_at
|
13
|
+
default_actions
|
14
|
+
end
|
15
|
+
|
16
|
+
show :title => :to_s do
|
17
|
+
panel Role.human_attribute_name(:user_roles) do
|
18
|
+
table_for role.user_roles, :i18n => UserRole do
|
19
|
+
column :user
|
20
|
+
column :active?
|
21
|
+
column :valid_from
|
22
|
+
column :valid_to
|
23
|
+
column do |user_role|
|
24
|
+
link_to(I18n.t('active_admin.view'), [:admin, user_role], :class => "member_link view_link") +
|
25
|
+
link_to(I18n.t('active_admin.edit'), [:edit, :admin, user_role], :class => "member_link edit_link")
|
26
|
+
end
|
27
|
+
end # table_for
|
28
|
+
end # panel
|
29
|
+
end
|
30
|
+
|
31
|
+
sidebar Role.human_attribute_name(:details), :only => :show do
|
32
|
+
attributes_table_for role do
|
33
|
+
row :namespace
|
34
|
+
row :identifier
|
35
|
+
row :enabled
|
36
|
+
row :created_at
|
37
|
+
row :updated_at
|
38
|
+
end
|
39
|
+
end # sidebar
|
40
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
ActiveAdmin.register UserRole do
|
2
|
+
# menu entry settings
|
3
|
+
menu :parent => Proc.new { I18n.t('ecm.user_area.active_admin.menu') }.call
|
4
|
+
|
5
|
+
form do |f|
|
6
|
+
f.semantic_errors *f.object.errors.keys
|
7
|
+
|
8
|
+
f.inputs do
|
9
|
+
f.input :user
|
10
|
+
f.input :role
|
11
|
+
f.input :valid_from, :as => :datepicker
|
12
|
+
f.input :valid_to, :as => :datepicker
|
13
|
+
end
|
14
|
+
f.actions
|
15
|
+
end
|
16
|
+
|
17
|
+
index do
|
18
|
+
column :role
|
19
|
+
column :user
|
20
|
+
column :valid_from
|
21
|
+
column :valid_to
|
22
|
+
column :active?
|
23
|
+
column :created_at
|
24
|
+
column :updated_at
|
25
|
+
default_actions
|
26
|
+
end
|
27
|
+
end
|
data/app/admin/users.rb
CHANGED
@@ -1,20 +1,58 @@
|
|
1
|
-
ActiveAdmin.register User do
|
2
|
-
|
3
|
-
|
4
|
-
column :current_sign_in_at
|
5
|
-
column :last_sign_in_at
|
6
|
-
column :sign_in_count
|
7
|
-
default_actions
|
8
|
-
end
|
1
|
+
ActiveAdmin.register User do
|
2
|
+
# menu entry settings
|
3
|
+
menu :parent => Proc.new { I18n.t('ecm.user_area.active_admin.menu') }.call
|
9
4
|
|
10
|
-
|
5
|
+
index do
|
6
|
+
column :email
|
7
|
+
column :current_sign_in_at
|
8
|
+
column :last_sign_in_at
|
9
|
+
column :sign_in_count
|
10
|
+
default_actions
|
11
|
+
end
|
11
12
|
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
f.input :
|
17
|
-
|
18
|
-
|
19
|
-
|
13
|
+
filter :email
|
14
|
+
|
15
|
+
form do |f|
|
16
|
+
f.inputs "User Details" do
|
17
|
+
f.input :email
|
18
|
+
f.input :password
|
19
|
+
f.input :password_confirmation
|
20
|
+
end
|
21
|
+
f.actions
|
22
|
+
end
|
23
|
+
|
24
|
+
show :title => :to_s do
|
25
|
+
panel User.human_attribute_name(:user_roles) do
|
26
|
+
table_for user.user_roles, :i18n => UserRole do
|
27
|
+
column :role
|
28
|
+
column :active?
|
29
|
+
column :valid_from
|
30
|
+
column :valid_to
|
31
|
+
column do |user_role|
|
32
|
+
link_to(I18n.t('active_admin.view'), [:admin, user_role], :class => "member_link view_link") +
|
33
|
+
link_to(I18n.t('active_admin.edit'), [:edit, :admin, user_role], :class => "member_link edit_link")
|
34
|
+
end
|
35
|
+
end # table_for
|
36
|
+
end # panel
|
37
|
+
end
|
38
|
+
|
39
|
+
sidebar User.human_attribute_name(:details), :only => :show do
|
40
|
+
attributes_table_for user do
|
41
|
+
row :email
|
42
|
+
row :reset_password_sent_at
|
43
|
+
row :remember_created_at
|
44
|
+
row :sign_in_count
|
45
|
+
row :current_sign_in_at
|
46
|
+
row :last_sign_in_at
|
47
|
+
row :current_sign_in_ip
|
48
|
+
row :confirmed_at
|
49
|
+
row :confirmation_sent_at
|
50
|
+
row :unconfirmed_email
|
51
|
+
row :failed_attempts
|
52
|
+
row :unlock_token
|
53
|
+
row :locked_at
|
54
|
+
row :created_at
|
55
|
+
row :updated_at
|
56
|
+
end
|
57
|
+
end # sidebar
|
20
58
|
end
|
@@ -1,3 +1,25 @@
|
|
1
1
|
class Ecm::UserArea::RegistrationsController < Devise::RegistrationsController
|
2
2
|
include RailsTools::I18nController
|
3
|
+
|
4
|
+
def new
|
5
|
+
if Ecm::UserArea::Configuration.registrations_disabled?
|
6
|
+
handle_disabled_registration
|
7
|
+
else
|
8
|
+
super
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
def create
|
13
|
+
if Ecm::UserArea::Configuration.registrations_disabled?
|
14
|
+
handle_disabled_registration
|
15
|
+
else
|
16
|
+
super
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
private
|
21
|
+
|
22
|
+
def handle_disabled_registration
|
23
|
+
redirect_to root_path, :notice => t('ecm.user_area.messages.notices.registrations_disabled')
|
24
|
+
end
|
3
25
|
end
|
data/app/models/role.rb
ADDED
@@ -0,0 +1,37 @@
|
|
1
|
+
class Role < ActiveRecord::Base
|
2
|
+
# Associations
|
3
|
+
has_many :user_roles
|
4
|
+
has_many :users, :through => :user_roles
|
5
|
+
|
6
|
+
# Attributes
|
7
|
+
attr_accessible :description,
|
8
|
+
:enabled,
|
9
|
+
:identifier,
|
10
|
+
:namespace
|
11
|
+
|
12
|
+
# Validations
|
13
|
+
validates :namespace, :presence => true
|
14
|
+
validates :identifier, :presence => true
|
15
|
+
|
16
|
+
def qualified_identifier
|
17
|
+
"#{namespace}/#{identifier}"
|
18
|
+
end
|
19
|
+
|
20
|
+
def to_s
|
21
|
+
qualified_identifier
|
22
|
+
end
|
23
|
+
|
24
|
+
def name
|
25
|
+
I18n.t("#{i18n_namespace}.name")
|
26
|
+
end
|
27
|
+
|
28
|
+
def description
|
29
|
+
I18n.t("#{i18n_namespace}.description")
|
30
|
+
end
|
31
|
+
|
32
|
+
private
|
33
|
+
|
34
|
+
def i18n_namespace
|
35
|
+
"#{namespace}/roles/#{identifier}".underscore.gsub("/", ".")
|
36
|
+
end
|
37
|
+
end
|
data/app/models/user.rb
CHANGED
@@ -1,13 +1,32 @@
|
|
1
1
|
class User < ActiveRecord::Base
|
2
|
+
# Associations
|
3
|
+
has_many :user_roles
|
4
|
+
has_many :roles, :through => :user_roles
|
5
|
+
has_many :active_roles, :through => :user_roles,
|
6
|
+
:class_name => "Role",
|
7
|
+
:source => :role,
|
8
|
+
:conditions => [ 'user_roles.valid_from < ? AND user_roles.valid_to > ? AND roles.enabled = ?', Time.zone.now, Time.zone.now, true ]
|
9
|
+
|
2
10
|
# Include default devise modules. Others available are:
|
3
11
|
# :token_authenticatable and :omniauthable
|
4
12
|
devise :confirmable, :database_authenticatable, :lockable, :registerable,
|
5
13
|
:recoverable, :rememberable, :timeoutable, :trackable, :validatable
|
6
14
|
|
7
15
|
# Setup accessible (or protected) attributes for your model
|
8
|
-
attr_accessible :email,
|
16
|
+
attr_accessible :email,
|
17
|
+
:password,
|
18
|
+
:password_confirmation,
|
19
|
+
:remember_me
|
9
20
|
|
10
21
|
def devise_mailer
|
11
22
|
Ecm::UserArea::Mailer
|
12
23
|
end
|
24
|
+
|
25
|
+
def has_role?(role_identifier)
|
26
|
+
active_roles.map(&:qualified_identifier).include?(role_identifier.to_s)
|
27
|
+
end
|
28
|
+
|
29
|
+
def to_s
|
30
|
+
email
|
31
|
+
end
|
13
32
|
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
class UserRole < ActiveRecord::Base
|
2
|
+
# Associations
|
3
|
+
belongs_to :user
|
4
|
+
belongs_to :role
|
5
|
+
|
6
|
+
# Attributes
|
7
|
+
attr_accessible :user_id,
|
8
|
+
:role_id,
|
9
|
+
:valid_from,
|
10
|
+
:valid_to
|
11
|
+
|
12
|
+
# Callbacks
|
13
|
+
after_initialize :set_defaults
|
14
|
+
|
15
|
+
# Delegates
|
16
|
+
delegate :name, :description, :to => :role, :prefix => true
|
17
|
+
|
18
|
+
def active?
|
19
|
+
valid_from < Time.zone.now && valid_to > Time.zone.now
|
20
|
+
end
|
21
|
+
|
22
|
+
private
|
23
|
+
|
24
|
+
def set_defaults
|
25
|
+
if new_record?
|
26
|
+
self.valid_from = Time.zone.now
|
27
|
+
self.valid_to = Time.zone.parse('9999-12-31 23:59:59')
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
module Ecm::UserArea
|
2
|
+
class RoleCollector
|
3
|
+
def self.call
|
4
|
+
self.new.call
|
5
|
+
end
|
6
|
+
|
7
|
+
def call
|
8
|
+
roles = Rbac::Role::Enumerator.call
|
9
|
+
roles.each do |role|
|
10
|
+
Role.where(:namespace => role.namespace, :identifier => role.identifier).first_or_create
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
@@ -20,6 +20,31 @@
|
|
20
20
|
</div>
|
21
21
|
<% end %>
|
22
22
|
|
23
|
+
<h3>Meine Rollen</h3>
|
24
|
+
|
25
|
+
<table class="table table-striped table-condensed">
|
26
|
+
<thead>
|
27
|
+
<tr>
|
28
|
+
<th><%= UserRole.human_attribute_name(:role_name) %></th>
|
29
|
+
<th><%= UserRole.human_attribute_name(:role_description) %></th>
|
30
|
+
<th><%= UserRole.human_attribute_name(:valid_from) %></th>
|
31
|
+
<th><%= UserRole.human_attribute_name(:valid_to) %></th>
|
32
|
+
<th><%= UserRole.human_attribute_name(:active?) %></th>
|
33
|
+
</tr>
|
34
|
+
</thead>
|
35
|
+
<tbody>
|
36
|
+
<% resource.user_roles.each do |user_role| %>
|
37
|
+
<tr>
|
38
|
+
<td><%= user_role.role_name %></td>
|
39
|
+
<td><%= user_role.role_description %></td>
|
40
|
+
<td><%= l(user_role.valid_from) %></td>
|
41
|
+
<td><%= l(user_role.valid_to) %></td>
|
42
|
+
<td><%= t(user_role.active?) %></td>
|
43
|
+
</tr>
|
44
|
+
<% end %>
|
45
|
+
</tbody>
|
46
|
+
</table>
|
47
|
+
|
23
48
|
<h3>Mein Konto kündigen</h3>
|
24
49
|
|
25
50
|
<p>Unzufrieden? <%= link_to "Mein Konto kündigen", registration_path(resource_name), :data => { :confirm => "Sind Sie sicher?" }, :method => :delete, :class=>'btn btn-danger btn-mini' %>.</p>
|
data/config/locales/de.yml
CHANGED
@@ -1,6 +1,14 @@
|
|
1
1
|
de:
|
2
2
|
activerecord:
|
3
3
|
attributes:
|
4
|
+
role:
|
5
|
+
created_at: Erstellt am
|
6
|
+
description: Beschreibung
|
7
|
+
enabled: Aktiv
|
8
|
+
identifier: Bezeichner
|
9
|
+
name: Name
|
10
|
+
namespace: Namensraum
|
11
|
+
updated_at: Aktualisiert am
|
4
12
|
user:
|
5
13
|
created_at: Erstellt am
|
6
14
|
current_password: Aktuelles Passwort
|
@@ -12,10 +20,24 @@ de:
|
|
12
20
|
password_confirmation: Passwort wiederholen
|
13
21
|
remember_me: merken?
|
14
22
|
sign_in_count: Anmeldungen
|
23
|
+
user_roles: Benutzerrollen
|
24
|
+
user_role:
|
25
|
+
active?: Aktiv
|
26
|
+
role: Rolle
|
27
|
+
role_description: Rollenbeschreibung
|
28
|
+
role_name: Name
|
29
|
+
valid_from: Gültig seit
|
30
|
+
valid_to: Gültig bis
|
15
31
|
models:
|
32
|
+
role:
|
33
|
+
one: Rolle
|
34
|
+
other: Rollen
|
16
35
|
user:
|
17
36
|
one: Benutzer
|
18
37
|
other: Benutzer
|
38
|
+
user_role:
|
39
|
+
one: Benutzerrolle
|
40
|
+
other: Benutzerrollen
|
19
41
|
ecm:
|
20
42
|
user_area:
|
21
43
|
actions:
|
@@ -24,3 +46,15 @@ de:
|
|
24
46
|
new: Registrieren
|
25
47
|
sign_in: Anmelden
|
26
48
|
sign_out: Abmelden
|
49
|
+
active_admin:
|
50
|
+
menu: Benutzerverwaltung
|
51
|
+
messages:
|
52
|
+
registrations_disabled: Derzeit sind Neuanmeldungen deaktiviert.
|
53
|
+
roles:
|
54
|
+
user_admin:
|
55
|
+
name: Benutzeradministrator
|
56
|
+
super_admin:
|
57
|
+
name: Superadministrator
|
58
|
+
description: Darf Rollen an andere Benutzer vergeben.
|
59
|
+
resources:
|
60
|
+
users: benutzer
|
data/config/locales/en.yml
CHANGED
@@ -1,6 +1,14 @@
|
|
1
1
|
en:
|
2
2
|
activerecord:
|
3
3
|
attributes:
|
4
|
+
role:
|
5
|
+
created_at: created at
|
6
|
+
description: description
|
7
|
+
enabled: enabled
|
8
|
+
identifier: identifier
|
9
|
+
name: name
|
10
|
+
namespace: namespace
|
11
|
+
updated_at: updated at
|
4
12
|
user:
|
5
13
|
created_at: created at
|
6
14
|
current_password: current password
|
@@ -12,10 +20,24 @@ en:
|
|
12
20
|
password_confirmation: password confirmation
|
13
21
|
remember_me: remember me?
|
14
22
|
sign_in_count: sign in count
|
23
|
+
user_roles: user roles
|
24
|
+
user_role:
|
25
|
+
active?: active
|
26
|
+
role: role
|
27
|
+
role_description: role description
|
28
|
+
role_name: name
|
29
|
+
valid_from: valid from
|
30
|
+
valid_to: valid to
|
15
31
|
models:
|
32
|
+
role:
|
33
|
+
one: role
|
34
|
+
other: roles
|
16
35
|
user:
|
17
36
|
one: user
|
18
37
|
other: users
|
38
|
+
user_role:
|
39
|
+
one: user role
|
40
|
+
other: user roles
|
19
41
|
ecm:
|
20
42
|
user_area:
|
21
43
|
actions:
|
@@ -24,3 +46,14 @@ en:
|
|
24
46
|
new: Register
|
25
47
|
sign_in: Sign in
|
26
48
|
sign_out: Sign out
|
49
|
+
active_admin:
|
50
|
+
menu: User management
|
51
|
+
messages:
|
52
|
+
registrations_disabled: Registrations are disabled at the moment.
|
53
|
+
roles:
|
54
|
+
user_admin:
|
55
|
+
name: User administrator
|
56
|
+
super_admin:
|
57
|
+
name: Super administrator
|
58
|
+
resources:
|
59
|
+
users: users
|
@@ -0,0 +1,14 @@
|
|
1
|
+
class CreateUserRoles < ActiveRecord::Migration
|
2
|
+
def change
|
3
|
+
create_table :user_roles do |t|
|
4
|
+
t.references :role, :null => false
|
5
|
+
t.references :user, :null => false
|
6
|
+
t.timestamp :valid_from, :null => false
|
7
|
+
t.timestamp :valid_to, :null => false
|
8
|
+
|
9
|
+
t.timestamps
|
10
|
+
end
|
11
|
+
add_index :user_roles, :role_id
|
12
|
+
add_index :user_roles, :user_id
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
require 'rbac/role/base'
|
2
|
+
|
3
|
+
module Ecm
|
4
|
+
module UserArea
|
5
|
+
module Roles
|
6
|
+
class UserAdmin < Rbac::Role::Base
|
7
|
+
end
|
8
|
+
|
9
|
+
class SuperAdmin < Rbac::Role::Base
|
10
|
+
end
|
11
|
+
|
12
|
+
def self.all
|
13
|
+
self.constants.select { |c| self.const_get(c).is_a? Class }.collect{ |klass| "#{self}::#{klass}"}.map(&:constantize).map(&:new)
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
data/lib/ecm_user_area.rb
CHANGED
@@ -1,13 +1,21 @@
|
|
1
1
|
require 'devise'
|
2
2
|
require 'devise-i18n'
|
3
|
+
require 'pundit'
|
3
4
|
require 'simple_form'
|
4
5
|
|
5
6
|
require 'ecm/user_area/engine'
|
6
7
|
require 'ecm/user_area/configuration'
|
7
8
|
require 'ecm/user_area/routing'
|
9
|
+
require 'ecm/user_area/roles'
|
10
|
+
|
11
|
+
require 'rbac/role/enumerator'
|
8
12
|
|
9
13
|
module Ecm
|
10
14
|
module UserArea
|
11
15
|
extend Configuration
|
16
|
+
|
17
|
+
def self.roles
|
18
|
+
Roles.all
|
19
|
+
end
|
12
20
|
end
|
13
21
|
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
module Rbac
|
2
|
+
module Role
|
3
|
+
class Base
|
4
|
+
def namespace
|
5
|
+
self.class.to_s.deconstantize.underscore.gsub("/roles", "")
|
6
|
+
end
|
7
|
+
|
8
|
+
def identifier
|
9
|
+
self.class.to_s.demodulize.underscore
|
10
|
+
end
|
11
|
+
|
12
|
+
def name
|
13
|
+
I18n.t("#{i18n_namespace}.name")
|
14
|
+
end
|
15
|
+
|
16
|
+
def description
|
17
|
+
I18n.t("#{i18n_namespace}.description")
|
18
|
+
end
|
19
|
+
|
20
|
+
private
|
21
|
+
|
22
|
+
def i18n_namespace
|
23
|
+
self.class.to_s.underscore.gsub("/", ".")
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
module Rbac
|
2
|
+
module Role
|
3
|
+
class Enumerator
|
4
|
+
def self.call
|
5
|
+
self.new.call
|
6
|
+
end
|
7
|
+
|
8
|
+
def call
|
9
|
+
Rails::Engine.subclasses.sort { |a, b| a.to_s <=> b.to_s }.collect do |engine|
|
10
|
+
namespace = engine.to_s.gsub('::Engine', '').constantize
|
11
|
+
namespace.roles if namespace.respond_to?(:roles)
|
12
|
+
end.flatten.reject(&:blank?)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
module Rbac
|
2
|
+
class RoleEnumerator
|
3
|
+
def self.call
|
4
|
+
self.new.call
|
5
|
+
end
|
6
|
+
|
7
|
+
def call
|
8
|
+
Rails::Engine.subclasses.sort { |a, b| a.to_s <=> b.to_s }.collect do |engine|
|
9
|
+
namespace = engine.to_s.gsub('::Engine', '').constantize
|
10
|
+
namespace.roles if namespace.respond_to?(:roles)
|
11
|
+
end.flatten
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
@@ -1,4 +1,6 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
1
|
+
namespace :ecm_user_area do
|
2
|
+
desc "Creates missing roles from engines"
|
3
|
+
task :collect_roles => :environment do |t, args|
|
4
|
+
Ecm::UserArea::RoleCollector.call
|
5
|
+
end
|
6
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ecm_user_area
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 961915988
|
5
5
|
prerelease: 6
|
6
6
|
segments:
|
7
|
+
- 1
|
7
8
|
- 0
|
8
9
|
- 0
|
9
|
-
- 1
|
10
10
|
- pre
|
11
|
-
version: 0.0.
|
11
|
+
version: 1.0.0.pre
|
12
12
|
platform: ruby
|
13
13
|
authors:
|
14
14
|
- Roberto Vasquez Angel
|
@@ -16,7 +16,7 @@ autorequire:
|
|
16
16
|
bindir: bin
|
17
17
|
cert_chain: []
|
18
18
|
|
19
|
-
date:
|
19
|
+
date: 2015-01-07 00:00:00 Z
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|
22
22
|
name: rails
|
@@ -77,7 +77,7 @@ dependencies:
|
|
77
77
|
type: :runtime
|
78
78
|
version_requirements: *id004
|
79
79
|
- !ruby/object:Gem::Dependency
|
80
|
-
name:
|
80
|
+
name: pundit
|
81
81
|
prerelease: false
|
82
82
|
requirement: &id005 !ruby/object:Gem::Requirement
|
83
83
|
none: false
|
@@ -88,10 +88,10 @@ dependencies:
|
|
88
88
|
segments:
|
89
89
|
- 0
|
90
90
|
version: "0"
|
91
|
-
type: :
|
91
|
+
type: :runtime
|
92
92
|
version_requirements: *id005
|
93
93
|
- !ruby/object:Gem::Dependency
|
94
|
-
name:
|
94
|
+
name: sqlite3
|
95
95
|
prerelease: false
|
96
96
|
requirement: &id006 !ruby/object:Gem::Requirement
|
97
97
|
none: false
|
@@ -105,7 +105,7 @@ dependencies:
|
|
105
105
|
type: :development
|
106
106
|
version_requirements: *id006
|
107
107
|
- !ruby/object:Gem::Dependency
|
108
|
-
name:
|
108
|
+
name: thin
|
109
109
|
prerelease: false
|
110
110
|
requirement: &id007 !ruby/object:Gem::Requirement
|
111
111
|
none: false
|
@@ -119,7 +119,7 @@ dependencies:
|
|
119
119
|
type: :development
|
120
120
|
version_requirements: *id007
|
121
121
|
- !ruby/object:Gem::Dependency
|
122
|
-
name:
|
122
|
+
name: yard
|
123
123
|
prerelease: false
|
124
124
|
requirement: &id008 !ruby/object:Gem::Requirement
|
125
125
|
none: false
|
@@ -133,7 +133,7 @@ dependencies:
|
|
133
133
|
type: :development
|
134
134
|
version_requirements: *id008
|
135
135
|
- !ruby/object:Gem::Dependency
|
136
|
-
name:
|
136
|
+
name: activeadmin
|
137
137
|
prerelease: false
|
138
138
|
requirement: &id009 !ruby/object:Gem::Requirement
|
139
139
|
none: false
|
@@ -147,7 +147,7 @@ dependencies:
|
|
147
147
|
type: :development
|
148
148
|
version_requirements: *id009
|
149
149
|
- !ruby/object:Gem::Dependency
|
150
|
-
name:
|
150
|
+
name: sass-rails
|
151
151
|
prerelease: false
|
152
152
|
requirement: &id010 !ruby/object:Gem::Requirement
|
153
153
|
none: false
|
@@ -161,7 +161,7 @@ dependencies:
|
|
161
161
|
type: :development
|
162
162
|
version_requirements: *id010
|
163
163
|
- !ruby/object:Gem::Dependency
|
164
|
-
name:
|
164
|
+
name: coffee-rails
|
165
165
|
prerelease: false
|
166
166
|
requirement: &id011 !ruby/object:Gem::Requirement
|
167
167
|
none: false
|
@@ -175,7 +175,7 @@ dependencies:
|
|
175
175
|
type: :development
|
176
176
|
version_requirements: *id011
|
177
177
|
- !ruby/object:Gem::Dependency
|
178
|
-
name:
|
178
|
+
name: i18n_routing
|
179
179
|
prerelease: false
|
180
180
|
requirement: &id012 !ruby/object:Gem::Requirement
|
181
181
|
none: false
|
@@ -189,7 +189,7 @@ dependencies:
|
|
189
189
|
type: :development
|
190
190
|
version_requirements: *id012
|
191
191
|
- !ruby/object:Gem::Dependency
|
192
|
-
name:
|
192
|
+
name: therubyracer
|
193
193
|
prerelease: false
|
194
194
|
requirement: &id013 !ruby/object:Gem::Requirement
|
195
195
|
none: false
|
@@ -203,7 +203,7 @@ dependencies:
|
|
203
203
|
type: :development
|
204
204
|
version_requirements: *id013
|
205
205
|
- !ruby/object:Gem::Dependency
|
206
|
-
name:
|
206
|
+
name: less-rails
|
207
207
|
prerelease: false
|
208
208
|
requirement: &id014 !ruby/object:Gem::Requirement
|
209
209
|
none: false
|
@@ -217,7 +217,7 @@ dependencies:
|
|
217
217
|
type: :development
|
218
218
|
version_requirements: *id014
|
219
219
|
- !ruby/object:Gem::Dependency
|
220
|
-
name:
|
220
|
+
name: twitter-bootstrap-rails
|
221
221
|
prerelease: false
|
222
222
|
requirement: &id015 !ruby/object:Gem::Requirement
|
223
223
|
none: false
|
@@ -231,7 +231,7 @@ dependencies:
|
|
231
231
|
type: :development
|
232
232
|
version_requirements: *id015
|
233
233
|
- !ruby/object:Gem::Dependency
|
234
|
-
name:
|
234
|
+
name: localeapp
|
235
235
|
prerelease: false
|
236
236
|
requirement: &id016 !ruby/object:Gem::Requirement
|
237
237
|
none: false
|
@@ -245,9 +245,23 @@ dependencies:
|
|
245
245
|
type: :development
|
246
246
|
version_requirements: *id016
|
247
247
|
- !ruby/object:Gem::Dependency
|
248
|
-
name:
|
248
|
+
name: capybara
|
249
249
|
prerelease: false
|
250
250
|
requirement: &id017 !ruby/object:Gem::Requirement
|
251
|
+
none: false
|
252
|
+
requirements:
|
253
|
+
- - ">="
|
254
|
+
- !ruby/object:Gem::Version
|
255
|
+
hash: 3
|
256
|
+
segments:
|
257
|
+
- 0
|
258
|
+
version: "0"
|
259
|
+
type: :development
|
260
|
+
version_requirements: *id017
|
261
|
+
- !ruby/object:Gem::Dependency
|
262
|
+
name: rspec-rails
|
263
|
+
prerelease: false
|
264
|
+
requirement: &id018 !ruby/object:Gem::Requirement
|
251
265
|
none: false
|
252
266
|
requirements:
|
253
267
|
- - ~>
|
@@ -258,11 +272,11 @@ dependencies:
|
|
258
272
|
- 0
|
259
273
|
version: "2.0"
|
260
274
|
type: :development
|
261
|
-
version_requirements: *
|
275
|
+
version_requirements: *id018
|
262
276
|
- !ruby/object:Gem::Dependency
|
263
277
|
name: shoulda-matchers
|
264
278
|
prerelease: false
|
265
|
-
requirement: &
|
279
|
+
requirement: &id019 !ruby/object:Gem::Requirement
|
266
280
|
none: false
|
267
281
|
requirements:
|
268
282
|
- - ">="
|
@@ -272,11 +286,11 @@ dependencies:
|
|
272
286
|
- 0
|
273
287
|
version: "0"
|
274
288
|
type: :development
|
275
|
-
version_requirements: *
|
289
|
+
version_requirements: *id019
|
276
290
|
- !ruby/object:Gem::Dependency
|
277
291
|
name: factory_girl_rails
|
278
292
|
prerelease: false
|
279
|
-
requirement: &
|
293
|
+
requirement: &id020 !ruby/object:Gem::Requirement
|
280
294
|
none: false
|
281
295
|
requirements:
|
282
296
|
- - ~>
|
@@ -287,11 +301,11 @@ dependencies:
|
|
287
301
|
- 0
|
288
302
|
version: "1.0"
|
289
303
|
type: :development
|
290
|
-
version_requirements: *
|
304
|
+
version_requirements: *id020
|
291
305
|
- !ruby/object:Gem::Dependency
|
292
306
|
name: guard-rails
|
293
307
|
prerelease: false
|
294
|
-
requirement: &
|
308
|
+
requirement: &id021 !ruby/object:Gem::Requirement
|
295
309
|
none: false
|
296
310
|
requirements:
|
297
311
|
- - ">="
|
@@ -301,11 +315,11 @@ dependencies:
|
|
301
315
|
- 0
|
302
316
|
version: "0"
|
303
317
|
type: :development
|
304
|
-
version_requirements: *
|
318
|
+
version_requirements: *id021
|
305
319
|
- !ruby/object:Gem::Dependency
|
306
320
|
name: rb-inotify
|
307
321
|
prerelease: false
|
308
|
-
requirement: &
|
322
|
+
requirement: &id022 !ruby/object:Gem::Requirement
|
309
323
|
none: false
|
310
324
|
requirements:
|
311
325
|
- - ~>
|
@@ -316,11 +330,11 @@ dependencies:
|
|
316
330
|
- 9
|
317
331
|
version: "0.9"
|
318
332
|
type: :development
|
319
|
-
version_requirements: *
|
333
|
+
version_requirements: *id022
|
320
334
|
- !ruby/object:Gem::Dependency
|
321
335
|
name: guard-rspec
|
322
336
|
prerelease: false
|
323
|
-
requirement: &
|
337
|
+
requirement: &id023 !ruby/object:Gem::Requirement
|
324
338
|
none: false
|
325
339
|
requirements:
|
326
340
|
- - ">="
|
@@ -330,11 +344,11 @@ dependencies:
|
|
330
344
|
- 0
|
331
345
|
version: "0"
|
332
346
|
type: :development
|
333
|
-
version_requirements: *
|
347
|
+
version_requirements: *id023
|
334
348
|
- !ruby/object:Gem::Dependency
|
335
349
|
name: guard-bundler
|
336
350
|
prerelease: false
|
337
|
-
requirement: &
|
351
|
+
requirement: &id024 !ruby/object:Gem::Requirement
|
338
352
|
none: false
|
339
353
|
requirements:
|
340
354
|
- - ">="
|
@@ -344,7 +358,7 @@ dependencies:
|
|
344
358
|
- 0
|
345
359
|
version: "0"
|
346
360
|
type: :development
|
347
|
-
version_requirements: *
|
361
|
+
version_requirements: *id024
|
348
362
|
description: ECM User Area.
|
349
363
|
email:
|
350
364
|
- roberto@vasquez-angel.de
|
@@ -385,16 +399,27 @@ files:
|
|
385
399
|
- app/views/ecm/user_area/shared/_links.de.erb
|
386
400
|
- app/mailers/ecm/user_area/mailer.rb
|
387
401
|
- app/models/user.rb
|
402
|
+
- app/models/role.rb
|
403
|
+
- app/models/user_role.rb
|
388
404
|
- app/admin/users.rb
|
405
|
+
- app/admin/roles.rb
|
406
|
+
- app/admin/user_roles.rb
|
407
|
+
- app/services/ecm/user_area/role_collector.rb
|
389
408
|
- config/locales/de.yml
|
390
409
|
- config/locales/en.yml
|
391
410
|
- db/migrate/001_devise_create_users.rb
|
411
|
+
- db/migrate/002_create_roles.rb
|
412
|
+
- db/migrate/003_create_user_roles.rb
|
413
|
+
- lib/rbac/role/base.rb
|
414
|
+
- lib/rbac/role/enumerator.rb
|
415
|
+
- lib/rbac/role_enumerator.rb
|
392
416
|
- lib/generators/ecm/user_area/locales/locales_generator.rb
|
393
417
|
- lib/generators/ecm/user_area/install/install_generator.rb
|
394
418
|
- lib/generators/ecm/user_area/install/templates/ecm_user_area.rb
|
395
419
|
- lib/tasks/ecm_user_area_tasks.rake
|
396
420
|
- lib/ecm_user_area.rb
|
397
421
|
- lib/ecm/user_area/engine.rb
|
422
|
+
- lib/ecm/user_area/roles.rb
|
398
423
|
- lib/ecm/user_area/version.rb
|
399
424
|
- lib/ecm/user_area/routing.rb
|
400
425
|
- lib/ecm/user_area/configuration.rb
|