ecm_user_area 0.0.1.pre → 1.0.0.pre
Sign up to get free protection for your applications and to get access to all the features.
- 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
|