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.
@@ -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
- index do
3
- column :email
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
- filter :email
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
- form do |f|
13
- f.inputs "User Details" do
14
- f.input :email
15
- f.input :password
16
- f.input :password_confirmation
17
- end
18
- f.actions
19
- end
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
@@ -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, :password, :password_confirmation, :remember_me
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>
@@ -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
@@ -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,12 @@
1
+ class CreateRoles < ActiveRecord::Migration
2
+ def change
3
+ create_table :roles do |t|
4
+ t.string :namespace
5
+ t.string :identifier
6
+ t.boolean :enabled
7
+ t.text :description
8
+
9
+ t.timestamps
10
+ end
11
+ end
12
+ end
@@ -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
@@ -9,8 +9,12 @@ module Ecm
9
9
  yield self
10
10
  end
11
11
 
12
- # mattr_accessor :foo
13
- # @@foo = nil
12
+ mattr_accessor :disable_registrations
13
+ @@disable_registrations = false
14
+
15
+ def self.registrations_disabled?
16
+ !!@@disable_registrations
17
+ end
14
18
  end
15
19
  end
16
20
  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
@@ -1,5 +1,5 @@
1
1
  module Ecm
2
2
  module UserArea
3
- VERSION = "0.0.1.pre"
4
- end
3
+ VERSION = "1.0.0.pre"
4
+ end
5
5
  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
@@ -1,3 +1,3 @@
1
1
  Ecm::UserArea.configure do |config|
2
- # config.foo = :bar
2
+ config.disable_registrations = false
3
3
  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
- # desc "Explaining what the task does"
2
- # task :ecm_user_area do
3
- # # Task goes here
4
- # end
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: 961915968
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.1.pre
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: 2013-04-09 00:00:00 Z
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: sqlite3
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: :development
91
+ type: :runtime
92
92
  version_requirements: *id005
93
93
  - !ruby/object:Gem::Dependency
94
- name: thin
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: yard
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: activeadmin
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: sass-rails
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: coffee-rails
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: i18n_routing
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: therubyracer
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: less-rails
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: twitter-bootstrap-rails
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: localeapp
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: capybara
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: rspec-rails
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: *id017
275
+ version_requirements: *id018
262
276
  - !ruby/object:Gem::Dependency
263
277
  name: shoulda-matchers
264
278
  prerelease: false
265
- requirement: &id018 !ruby/object:Gem::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: *id018
289
+ version_requirements: *id019
276
290
  - !ruby/object:Gem::Dependency
277
291
  name: factory_girl_rails
278
292
  prerelease: false
279
- requirement: &id019 !ruby/object:Gem::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: *id019
304
+ version_requirements: *id020
291
305
  - !ruby/object:Gem::Dependency
292
306
  name: guard-rails
293
307
  prerelease: false
294
- requirement: &id020 !ruby/object:Gem::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: *id020
318
+ version_requirements: *id021
305
319
  - !ruby/object:Gem::Dependency
306
320
  name: rb-inotify
307
321
  prerelease: false
308
- requirement: &id021 !ruby/object:Gem::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: *id021
333
+ version_requirements: *id022
320
334
  - !ruby/object:Gem::Dependency
321
335
  name: guard-rspec
322
336
  prerelease: false
323
- requirement: &id022 !ruby/object:Gem::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: *id022
347
+ version_requirements: *id023
334
348
  - !ruby/object:Gem::Dependency
335
349
  name: guard-bundler
336
350
  prerelease: false
337
- requirement: &id023 !ruby/object:Gem::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: *id023
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