ecm_rbac 0.0.2

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.
Files changed (32) hide show
  1. checksums.yaml +7 -0
  2. data/MIT-LICENSE +20 -0
  3. data/README.rdoc +37 -0
  4. data/Rakefile +17 -0
  5. data/app/assets/javascripts/ecm/rbac/application.js +13 -0
  6. data/app/assets/stylesheets/ecm/rbac/application.css +14 -0
  7. data/app/controllers/ecm/rbac/application_controller.rb +6 -0
  8. data/app/helpers/ecm/rbac/application_helper.rb +6 -0
  9. data/app/models/concerns/model/ecm/rbac/user_concern.rb +26 -0
  10. data/app/models/concerns/model/flag_from_time_range_concern.rb +26 -0
  11. data/app/models/ecm/rbac/permission.rb +45 -0
  12. data/app/models/ecm/rbac/role.rb +43 -0
  13. data/app/models/ecm/rbac/role_permission.rb +20 -0
  14. data/app/models/ecm/rbac/user_role.rb +17 -0
  15. data/app/services/ecm/rbac/import_default_permissions_service.rb +115 -0
  16. data/app/views/layouts/ecm/rbac/application.html.erb +14 -0
  17. data/config/locales/de.yml +28 -0
  18. data/config/routes.rb +2 -0
  19. data/db/migrate/20160301103116_create_ecm_rbac_roles.rb +11 -0
  20. data/db/migrate/20160301103202_create_ecm_rbac_user_roles.rb +10 -0
  21. data/db/migrate/20160301103219_create_ecm_rbac_permissions.rb +11 -0
  22. data/db/migrate/20160301103240_create_ecm_rbac_role_permissions.rb +10 -0
  23. data/lib/active_model/validations/file_readability_validator.rb +25 -0
  24. data/lib/ecm/rbac/configuration.rb +18 -0
  25. data/lib/ecm/rbac/engine.rb +7 -0
  26. data/lib/ecm/rbac/version.rb +5 -0
  27. data/lib/ecm/rbac.rb +11 -0
  28. data/lib/ecm_rbac.rb +2 -0
  29. data/lib/generators/ecm/rbac/install/install_generator.rb +15 -0
  30. data/lib/generators/ecm/rbac/install/templates/initializer.rb +7 -0
  31. data/lib/tasks/ecm/rbac_tasks.rake +4 -0
  32. metadata +89 -0
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: db4210d9455f2ae61b936671e2f2c5ff834a99cb
4
+ data.tar.gz: 3f086b39256ae0613d7bd043031e26cddabf9f4d
5
+ SHA512:
6
+ metadata.gz: 45e1c6eb54c7bdafc93eceaf0653ff0eeaadd72fa7f49f6b117b36f0134b3877f8b32966647126a01382a35d667d62ffc84671ba35522b828f935850cba3c5b8
7
+ data.tar.gz: 498a5162e9ac3072fbdf50cc96fb0445e856fde8fcebd6264f9f9aa92ccea94f1693aaa255aed67ae76305e03088dd247011d0de9a384aa725fcf2e394e510fc
data/MIT-LICENSE ADDED
@@ -0,0 +1,20 @@
1
+ Copyright 2016 Roberto Vasquez Angel
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.rdoc ADDED
@@ -0,0 +1,37 @@
1
+ = Ecm::Rbac
2
+
3
+ This module implements role based access control on top of pundit.
4
+
5
+
6
+ = Why?
7
+
8
+ * Flexible handling of roles, role permissions, permissions and user permissions in the database.
9
+ * Automatic mapping of controllers and actions to permissions.
10
+
11
+
12
+ = Installation
13
+
14
+ Add it to your gemfile, bundle and run installer:
15
+
16
+ echo "\ngem 'ecm_rbac'" >> Gemfile
17
+ bundle
18
+ rails g ecm:rbac:install
19
+
20
+ The installer will add an initializer with configuration options in initializers/ecm_rbac.rb
21
+
22
+ Add the database migrations and migrate:
23
+
24
+ rake ecm_rbac:install:migrations
25
+ rake db:migrate
26
+
27
+
28
+ = Configuration
29
+
30
+ Possible options in the initializer:
31
+
32
+ * user_class_name: The class of the user model. Default is User.
33
+
34
+
35
+ = License
36
+
37
+ This project rocks and uses MIT-LICENSE.
data/Rakefile ADDED
@@ -0,0 +1,17 @@
1
+ begin
2
+ require 'bundler/setup'
3
+ rescue LoadError
4
+ puts 'You must `gem install bundler` and `bundle install` to run rake tasks'
5
+ end
6
+
7
+ require 'rdoc/task'
8
+
9
+ RDoc::Task.new(:rdoc) do |rdoc|
10
+ rdoc.rdoc_dir = 'rdoc'
11
+ rdoc.title = 'Ecm::Rbac'
12
+ rdoc.options << '--line-numbers'
13
+ rdoc.rdoc_files.include('README.rdoc')
14
+ rdoc.rdoc_files.include('lib/**/*.rb')
15
+ end
16
+
17
+ Bundler::GemHelper.install_tasks
@@ -0,0 +1,13 @@
1
+ // This is a manifest file that'll be compiled into application.js, which will include all the files
2
+ // listed below.
3
+ //
4
+ // Any JavaScript/Coffee file within this directory, lib/assets/javascripts, vendor/assets/javascripts,
5
+ // or any plugin's vendor/assets/javascripts directory can be referenced here using a relative path.
6
+ //
7
+ // It's not advisable to add code directly here, but if you do, it'll appear at the bottom of the
8
+ // compiled file.
9
+ //
10
+ // Read Sprockets README (https://github.com/sstephenson/sprockets#sprockets-directives) for details
11
+ // about supported directives.
12
+ //
13
+ //= require_tree .
@@ -0,0 +1,14 @@
1
+ /*
2
+ * This is a manifest file that'll be compiled into application.css, which will include all the files
3
+ * listed below.
4
+ *
5
+ * Any CSS and SCSS file within this directory, lib/assets/stylesheets, vendor/assets/stylesheets,
6
+ * or any plugin's vendor/assets/stylesheets directory can be referenced here using a relative path.
7
+ *
8
+ * You're free to add application-wide styles to this file and they'll appear at the bottom of the
9
+ * compiled file so the styles you add here take precedence over styles defined in any other CSS/SCSS
10
+ * files in this directory. It is generally better to create a new file per style scope.
11
+ *
12
+ *= require_tree .
13
+ *= require_self
14
+ */
@@ -0,0 +1,6 @@
1
+ module Ecm
2
+ module Rbac
3
+ class ApplicationController < ActionController::Base
4
+ end
5
+ end
6
+ end
@@ -0,0 +1,6 @@
1
+ module Ecm
2
+ module Rbac
3
+ module ApplicationHelper
4
+ end
5
+ end
6
+ end
@@ -0,0 +1,26 @@
1
+ module Model
2
+ module Ecm
3
+ module Rbac
4
+ module UserConcern
5
+ extend ActiveSupport::Concern
6
+
7
+ included do
8
+ # associations
9
+ has_many :user_roles, class_name: 'Ecm::Rbac::UserRole', inverse_of: :user
10
+ has_many :roles, class_name: 'Ecm::Rbac::Role', through: :user_roles
11
+ has_many :role_permissions, class_name: 'Ecm::Rbac::RolePermission', through: :roles
12
+ has_many :permissions, through: :role_permissions, class_name: 'Ecm::Rbac::Permission'
13
+
14
+ has_many :enabled_roles, -> { enabled }, class_name: 'Ecm::Rbac::Role', through: :user_roles # , source: :user
15
+ has_many :enabled_role_permissions, class_name: 'Ecm::Rbac::RolePermission', through: :enabled_roles, source: :user_roles
16
+
17
+ has_many :enabled_permissions, through: :enabled_role_permissions, class_name: 'Ecm::Rbac::Permission', source: :permission
18
+ end
19
+
20
+ def allowed_to?(permission_name)
21
+ enabled_permissions.map(&:identifier).map(&:to_sym).include?(permission_name.to_sym)
22
+ end
23
+ end
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,26 @@
1
+ module Model
2
+ module FlagFromTimeRangeConcern
3
+ extend ActiveSupport::Concern
4
+
5
+ class_methods do
6
+ def flag_from_time_range(*args)
7
+ options = args.extract_options!
8
+ attributes = args
9
+
10
+ attributes.each do |attribute|
11
+ method_name_base = attribute.to_s.chomp('?')
12
+ define_method attribute do
13
+ time_range = (send("#{method_name_base}_from")..send("#{method_name_base}_to"))
14
+ time_range.cover? Time.zone.now
15
+ end
16
+
17
+ define_singleton_method method_name_base do
18
+ t = arel_table
19
+ now = Time.zone.now
20
+ where(t["#{method_name_base}_from"].lteq(now)).where(t["#{method_name_base}_to"].gteq(now))
21
+ end
22
+ end
23
+ end
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,45 @@
1
+ require 'model/flag_from_time_range_concern'
2
+
3
+ module Ecm::Rbac
4
+ class Permission < ActiveRecord::Base
5
+ include Model::FlagFromTimeRangeConcern
6
+
7
+ DEFAULTS = {
8
+ enabled_from: '01.01.1900 00:00:00',
9
+ enabled_to: '31.12.9999 23:59:59'
10
+ }
11
+
12
+ # associations
13
+ has_many :role_permissions, class_name: 'Ecm::Rbac::RolePermission'
14
+ has_many :roles, class_name: 'Ecm::Rbac::Role', through: :role_permissions
15
+ has_many :user_roles, through: :roles, class_name: 'Ecm::Rbac::UserRole'
16
+ has_many :users, through: :user_roles, class_name: Ecm::Rbac::Configuration.user_class
17
+
18
+ has_many :enabled_roles, -> { enabled }, class_name: 'Ecm::Rbac::Role', through: :role_permissions, source: :permission
19
+ has_many :enabled_user_roles, class_name: 'Ecm::Rbac::UserRole', through: :enabled_roles, source: :role_permissions
20
+
21
+ has_many :enabled_users, through: :enabled_user_roles, class_name: 'User', source: :user
22
+
23
+ flag_from_time_range :enabled?
24
+
25
+ # validations
26
+ validates :identifier, presence: true, uniqueness: true
27
+ validates :enabled_from, presence: true
28
+ validates :enabled_to, presence: true
29
+
30
+ # callbacks
31
+ after_initialize :set_defaults
32
+
33
+ def human
34
+ "#{self.class.model_name.human}: #{identifier}"
35
+ end
36
+
37
+ private
38
+
39
+ def set_defaults
40
+ return if persisted?
41
+ self.enabled_from = DEFAULTS[:enabled_from]
42
+ self.enabled_to = DEFAULTS[:enabled_to]
43
+ end
44
+ end
45
+ end
@@ -0,0 +1,43 @@
1
+ require 'model/flag_from_time_range_concern'
2
+
3
+ module Ecm::Rbac
4
+ class Role < ActiveRecord::Base
5
+ include Model::FlagFromTimeRangeConcern
6
+
7
+ DEFAULTS = {
8
+ enabled_from: '01.01.1900 00:00:00',
9
+ enabled_to: '31.12.9999 23:59:59'
10
+ }
11
+
12
+ # associations
13
+ has_many :user_roles, class_name: 'Ecm::Rbac::UserRole', inverse_of: :role
14
+ has_many :users, through: :user_roles # , class_name: Ecm::Rbac::Configuration.user_class
15
+
16
+ has_many :role_permissions, class_name: 'Ecm::Rbac::RolePermission'
17
+ has_many :permissions, class_name: 'Ecm::Rbac::Permission', through: :role_permissions
18
+
19
+ has_many :enabled_permissions, -> { enabled }, class_name: 'Ecm::Rbac::Permission', through: :role_permissions, source: :role
20
+
21
+ flag_from_time_range :enabled?
22
+
23
+ # validations
24
+ validates :identifier, presence: true, uniqueness: true
25
+ validates :enabled_from, presence: true
26
+ validates :enabled_to, presence: true
27
+
28
+ # callbacks
29
+ after_initialize :set_defaults
30
+
31
+ def human
32
+ "#{self.class.model_name.human}: #{identifier}"
33
+ end
34
+
35
+ private
36
+
37
+ def set_defaults
38
+ return if persisted?
39
+ self.enabled_from = DEFAULTS[:enabled_from]
40
+ self.enabled_to = DEFAULTS[:enabled_to]
41
+ end
42
+ end
43
+ end
@@ -0,0 +1,20 @@
1
+ module Ecm::Rbac
2
+ class RolePermission < ActiveRecord::Base
3
+ # associations
4
+ belongs_to :permission
5
+ belongs_to :role
6
+ has_many :user_roles, through: :role
7
+ has_many :users, through: :user_roles
8
+
9
+ # belongs_to :enabled_permission, foreign_key: 'permission_id', class_name: 'Ecm::Rbac::Permission'
10
+
11
+ belongs_to :enabled_role, -> { enabled }, foreign_key: 'role_id', class_name: 'Ecm::Rbac::Role'
12
+ has_many :enabled_user_roles, through: :enabled_role, source: :user_roles
13
+ has_many :enabled_users, through: :enabled_user_roles, source: :enabled_role_permissions
14
+
15
+ # validations
16
+ validates :permission, presence: true
17
+ validates :permission_id, uniqueness: { scope: :role_id }
18
+ validates :role, presence: true
19
+ end
20
+ end
@@ -0,0 +1,17 @@
1
+ module Ecm::Rbac
2
+ class UserRole < ActiveRecord::Base
3
+ # associations
4
+ belongs_to :user, class_name: Ecm::Rbac::Configuration.user_class, foreign_key: 'user_id', inverse_of: :user_roles
5
+ # belongs_to :enabled_user, foreign_key: 'user_id', class_name: 'User'
6
+ belongs_to :role, inverse_of: :user_roles
7
+
8
+ belongs_to :enabled_role, -> { enabled }, foreign_key: 'role_id', class_name: 'Ecm::Rbac::Role'
9
+ has_many :enabled_role_permissions, through: :enabled_role, source: :user_roles, class_name: 'Ecm::Rbac::RolePermission'
10
+ has_many :enabled_permissions, through: :enabled_role_permissions, class_name: 'Ecm::Rbac::Permission', source: :permission
11
+
12
+ # validations
13
+ validates :user, presence: true
14
+ validates :user_id, uniqueness: { scope: :role_id }
15
+ validates :role, presence: true
16
+ end
17
+ end
@@ -0,0 +1,115 @@
1
+ require_dependency 'itsf_services'
2
+ require_dependency 'active_model/validations/file_readability_validator'
3
+
4
+ module Ecm::Rbac
5
+ class ImportDefaultPermissionsService < Itsf::Services::V2::Service::Base
6
+ class Response < Itsf::Services::V2::Response::Base
7
+ attr_accessor :permissions, :roles, :role_permissions
8
+ end
9
+
10
+ attr_accessor :filename
11
+
12
+ validates :filename, file_readability: true
13
+
14
+ def do_work
15
+ say 'Start'
16
+ say 'Validating input', indent: 1
17
+ unless valid?
18
+ say "Inputs are invalid. Errors: #{errors.full_messages.to_sentence}", indent: 1
19
+ say 'Aborted'
20
+ return response
21
+ end
22
+ say 'Input is valid', indent: 1
23
+
24
+ load_yaml
25
+ return response unless yaml_structure_valid?
26
+
27
+ load_permissions
28
+ load_roles
29
+
30
+ response.permissions = create_or_update_permissions
31
+ response.roles = create_or_update_roles
32
+ response.role_permissions = create_or_update_role_permissions
33
+ say 'Done'
34
+ respond
35
+ end
36
+
37
+ private
38
+
39
+ def create_or_update_permissions
40
+ permissions = @permissions.collect do |permission_identifier|
41
+ Ecm::Rbac::Permission.where(identifier: permission_identifier).first_or_initialize.tap do |permission|
42
+ permission.save!
43
+ end
44
+ end
45
+ say "Saved #{permissions.count} permissions", indent: 1
46
+ permissions
47
+ end
48
+
49
+ def create_or_update_roles
50
+ roles = @roles.collect do |role_identifier, permissions|
51
+ Ecm::Rbac::Role.where(identifier: role_identifier).first_or_initialize.tap do |role|
52
+ role.save!
53
+ end
54
+ end
55
+ say "Saved #{roles.count} roles", indent: 1
56
+ roles
57
+ end
58
+
59
+ def create_or_update_role_permissions
60
+ role_permissions = @roles.collect do |role_identifier, permissions|
61
+ role = Ecm::Rbac::Role.where(identifier: role_identifier).first
62
+ permissions.collect do |permission_identifier|
63
+ permission = Ecm::Rbac::Permission.where(identifier: permission_identifier).first
64
+
65
+ Ecm::Rbac::RolePermission.where(role_id: role, permission_id: permission).first_or_initialize.tap do |role_permission|
66
+ role_permission.save!
67
+ end
68
+ end
69
+ end.flatten
70
+ say "Saved #{role_permissions.count} role permissions", indent: 1
71
+ role_permissions
72
+ end
73
+
74
+ def load_permissions
75
+ @permissions = @yaml[:defaults][:permissions]
76
+ say "Loaded #{@permissions.size} permissions", indent: 1
77
+ end
78
+
79
+ def load_roles
80
+ @roles = @yaml[:defaults][:roles]
81
+ say "Loaded #{@roles.size} roles", indent: 1
82
+ end
83
+
84
+ def load_yaml
85
+ @yaml = YAML.load_file(filename).with_indifferent_access
86
+ say "Loaded YAML from #{filename}", indent: 1
87
+ end
88
+
89
+ def yaml_structure_valid?
90
+ say "Checking for valid YAML structure", indent: 1
91
+ unless @yaml.is_a?(Hash)
92
+ add_error_and_say(:yaml_file, "Expected file content of #{filename} to parse to a Hash, but was #{@yaml.class}")
93
+ return false
94
+ end
95
+
96
+ unless @yaml.has_key?(:defaults)
97
+ add_error_and_say(:yaml_file, "Expected yaml in #{filename} to have the key [defaults:].")
98
+ return false
99
+ end
100
+
101
+ unless @yaml[:defaults].has_key?(:roles)
102
+ add_error_and_say(:yaml_file, "Expected yaml in #{filename} to have the key [defaults:][roles:].")
103
+ return false
104
+ end
105
+
106
+
107
+ unless @yaml[:defaults].has_key?(:permissions)
108
+ add_error_and_say(:yaml_file, "Expected yaml in #{filename} to have the key [defaults:][permissions:].")
109
+ return false
110
+ end
111
+
112
+ return true
113
+ end
114
+ end
115
+ end
@@ -0,0 +1,14 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <title>Rbac</title>
5
+ <%= stylesheet_link_tag "ecm/rbac/application", media: "all" %>
6
+ <%= javascript_include_tag "ecm/rbac/application" %>
7
+ <%= csrf_meta_tags %>
8
+ </head>
9
+ <body>
10
+
11
+ <%= yield %>
12
+
13
+ </body>
14
+ </html>
@@ -0,0 +1,28 @@
1
+ de:
2
+ activerecord:
3
+ attributes:
4
+ ecm/rbac/permission:
5
+ actions: Aktionen
6
+ created_at: Erstellt am
7
+ enabled?: Aktiv
8
+ enabled_from: Aktiv ab
9
+ enabled_to: Aktiv bis
10
+ identifier: Bezeichner
11
+ updated_at: Aktualisiert am
12
+ ecm/rbac/role:
13
+ actions: Aktionen
14
+ created_at: Erstellt am
15
+ enabled?: Aktiv
16
+ enabled_from: Aktiv ab
17
+ enabled_to: Aktiv bis
18
+ identifier: Bezeichner
19
+ updated_at: Aktualisiert am
20
+ models:
21
+ ecm/rbac/permission:
22
+ one: Berechtigung
23
+ other: Berechtigungen
24
+ ecm/rbac/role:
25
+ one: Rolle
26
+ other: Rollen
27
+ classes:
28
+ ecm/rbac/import_default_permissions_service: Dienst zum Einrichten von Berechtigungen
data/config/routes.rb ADDED
@@ -0,0 +1,2 @@
1
+ Ecm::Rbac::Engine.routes.draw do
2
+ end
@@ -0,0 +1,11 @@
1
+ class CreateEcmRbacRoles < ActiveRecord::Migration
2
+ def change
3
+ create_table :ecm_rbac_roles do |t|
4
+ t.string :identifier
5
+ t.timestamp :enabled_from
6
+ t.timestamp :enabled_to
7
+
8
+ t.timestamps null: false
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,10 @@
1
+ class CreateEcmRbacUserRoles < ActiveRecord::Migration
2
+ def change
3
+ create_table :ecm_rbac_user_roles do |t|
4
+ t.integer :user_id, index: true
5
+ t.integer :role_id, index: true
6
+
7
+ t.timestamps null: false
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,11 @@
1
+ class CreateEcmRbacPermissions < ActiveRecord::Migration
2
+ def change
3
+ create_table :ecm_rbac_permissions do |t|
4
+ t.string :identifier
5
+ t.timestamp :enabled_from
6
+ t.timestamp :enabled_to
7
+
8
+ t.timestamps null: false
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,10 @@
1
+ class CreateEcmRbacRolePermissions < ActiveRecord::Migration
2
+ def change
3
+ create_table :ecm_rbac_role_permissions do |t|
4
+ t.integer :role_id, index: true
5
+ t.integer :permission_id, index: true
6
+
7
+ t.timestamps null: false
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,25 @@
1
+ module ActiveModel
2
+ module Validations
3
+ class FileReadabilityValidator < ::ActiveModel::EachValidator
4
+ def validate_each(record, attribute, value)
5
+ filename = File.expand_path(value) if !value.nil? && value.respond_to?(:to_s)
6
+ if filename.nil?
7
+ record.errors.add(attribute, options[:message] || :filename_is_nil)
8
+ return
9
+ end
10
+ unless File.exists?(filename)
11
+ record.errors.add(attribute, options[:message] || :file_not_existent, filename: filename)
12
+ return
13
+ end
14
+ unless File.file?(filename)
15
+ record.errors.add(attribute, options[:message] || :file_not_file, filename: filename)
16
+ return
17
+ end
18
+ unless File.readable?(filename)
19
+ record.errors.add(attribute, options[:message] || :file_not_readable, filename: filename)
20
+ return
21
+ end
22
+ end
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,18 @@
1
+ require 'active_support/core_ext/module/delegation'
2
+ require 'active_support/core_ext/module/attribute_accessors'
3
+
4
+ module Ecm
5
+ module Rbac
6
+ module Configuration
7
+ def configure
8
+ yield self
9
+ end
10
+
11
+ mattr_accessor(:user_class_name) { 'User' }
12
+
13
+ def self.user_class
14
+ user_class_name.constantize
15
+ end
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,7 @@
1
+ module Ecm
2
+ module Rbac
3
+ class Engine < ::Rails::Engine
4
+ isolate_namespace Ecm::Rbac
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,5 @@
1
+ module Ecm
2
+ module Rbac
3
+ VERSION = '0.0.2'.freeze
4
+ end
5
+ end
data/lib/ecm/rbac.rb ADDED
@@ -0,0 +1,11 @@
1
+ require 'ecm/rbac/configuration'
2
+
3
+ module Ecm
4
+ module Rbac
5
+ extend Configuration
6
+
7
+ def self.table_name_prefix
8
+ 'ecm_rbac_'
9
+ end
10
+ end
11
+ end
data/lib/ecm_rbac.rb ADDED
@@ -0,0 +1,2 @@
1
+ require 'ecm/rbac'
2
+ require 'ecm/rbac/engine'
@@ -0,0 +1,15 @@
1
+ module Ecm
2
+ module Rbac
3
+ module Generators
4
+ class InstallGenerator < Rails::Generators::Base
5
+ desc 'Generates the intializer'
6
+
7
+ source_root File.expand_path('../templates', __FILE__)
8
+
9
+ def generate_initializer
10
+ copy_file 'initializer.rb', 'config/initializers/ecm_rbac.rb'
11
+ end
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,7 @@
1
+ Ecm::Rbac.configure do |config|
2
+ # Set the User class.
3
+ #
4
+ # Default: config.user_class_name = 'User'
5
+ #
6
+ config.user_class_name = 'User'
7
+ end
@@ -0,0 +1,4 @@
1
+ # desc "Explaining what the task does"
2
+ # task :rbac do
3
+ # # Task goes here
4
+ # end
metadata ADDED
@@ -0,0 +1,89 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: ecm_rbac
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.2
5
+ platform: ruby
6
+ authors:
7
+ - Roberto Vasquez Angel
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2016-03-22 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: rails
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ description: Ecm::Rbac Module.
28
+ email:
29
+ - roberto@vasquez-angel.de
30
+ executables: []
31
+ extensions: []
32
+ extra_rdoc_files: []
33
+ files:
34
+ - MIT-LICENSE
35
+ - README.rdoc
36
+ - Rakefile
37
+ - app/assets/javascripts/ecm/rbac/application.js
38
+ - app/assets/stylesheets/ecm/rbac/application.css
39
+ - app/controllers/ecm/rbac/application_controller.rb
40
+ - app/helpers/ecm/rbac/application_helper.rb
41
+ - app/models/concerns/model/ecm/rbac/user_concern.rb
42
+ - app/models/concerns/model/flag_from_time_range_concern.rb
43
+ - app/models/ecm/rbac/permission.rb
44
+ - app/models/ecm/rbac/role.rb
45
+ - app/models/ecm/rbac/role_permission.rb
46
+ - app/models/ecm/rbac/user_role.rb
47
+ - app/services/ecm/rbac/import_default_permissions_service.rb
48
+ - app/views/layouts/ecm/rbac/application.html.erb
49
+ - config/locales/de.yml
50
+ - config/routes.rb
51
+ - db/migrate/20160301103116_create_ecm_rbac_roles.rb
52
+ - db/migrate/20160301103202_create_ecm_rbac_user_roles.rb
53
+ - db/migrate/20160301103219_create_ecm_rbac_permissions.rb
54
+ - db/migrate/20160301103240_create_ecm_rbac_role_permissions.rb
55
+ - lib/active_model/validations/file_readability_validator.rb
56
+ - lib/ecm/rbac.rb
57
+ - lib/ecm/rbac/configuration.rb
58
+ - lib/ecm/rbac/engine.rb
59
+ - lib/ecm/rbac/version.rb
60
+ - lib/ecm_rbac.rb
61
+ - lib/generators/ecm/rbac/install/install_generator.rb
62
+ - lib/generators/ecm/rbac/install/templates/initializer.rb
63
+ - lib/tasks/ecm/rbac_tasks.rake
64
+ homepage: https://github.com/robotex82/ecm_rbac
65
+ licenses:
66
+ - MIT
67
+ metadata: {}
68
+ post_install_message:
69
+ rdoc_options: []
70
+ require_paths:
71
+ - lib
72
+ required_ruby_version: !ruby/object:Gem::Requirement
73
+ requirements:
74
+ - - ">="
75
+ - !ruby/object:Gem::Version
76
+ version: '0'
77
+ required_rubygems_version: !ruby/object:Gem::Requirement
78
+ requirements:
79
+ - - ">="
80
+ - !ruby/object:Gem::Version
81
+ version: '0'
82
+ requirements: []
83
+ rubyforge_project:
84
+ rubygems_version: 2.4.8
85
+ signing_key:
86
+ specification_version: 4
87
+ summary: Ecm::Rbac.
88
+ test_files: []
89
+ has_rdoc: