the_role 1.7.0 → 2.0.0

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 (37) hide show
  1. data/.travis.yml +5 -0
  2. data/README.md +139 -114
  3. data/app/assets/stylesheets/the_role.css.scss +47 -0
  4. data/app/controllers/admin/role_sections_controller.rb +8 -6
  5. data/app/controllers/admin/roles_controller.rb +9 -6
  6. data/app/controllers/the_role_controller.rb +18 -0
  7. data/app/models/concerns/role_model.rb +124 -0
  8. data/app/models/concerns/the_role_base.rb +30 -0
  9. data/app/models/concerns/the_role_user_model.rb +45 -0
  10. data/app/views/admin/roles/_role.html.haml +54 -53
  11. data/app/views/admin/roles/_sidebar.html.haml +4 -1
  12. data/app/views/admin/roles/edit.html.haml +2 -2
  13. data/app/views/admin/roles/index.haml +2 -2
  14. data/app/views/admin/roles/new.html.haml +18 -17
  15. data/lib/generators/the_role/USAGE +19 -0
  16. data/lib/generators/the_role/templates/the_role.rb +5 -0
  17. data/lib/generators/the_role/the_role_generator.rb +23 -0
  18. data/lib/the_role/config.rb +20 -0
  19. data/lib/the_role/hash.rb +23 -30
  20. data/lib/the_role/param_helper.rb +5 -11
  21. data/lib/the_role/version.rb +1 -1
  22. data/lib/the_role.rb +15 -14
  23. data/the_role.gemspec +2 -2
  24. metadata +20 -18
  25. data/app/assets/javascripts/admin_the_role.js +0 -4
  26. data/app/assets/javascripts/bootstrap-alert.js +0 -90
  27. data/app/assets/javascripts/bootstrap-dropdown.js +0 -100
  28. data/app/assets/stylesheets/admin_the_role.css +0 -6
  29. data/app/assets/stylesheets/custom.css +0 -3
  30. data/app/assets/stylesheets/headers.css +0 -12
  31. data/app/assets/stylesheets/reset.css +0 -117
  32. data/app/assets/stylesheets/role_base.css +0 -1739
  33. data/lib/the_role/engine.rb +0 -16
  34. data/lib/the_role/modules/base.rb +0 -30
  35. data/lib/the_role/modules/controller_requires.rb +0 -17
  36. data/lib/the_role/modules/role_model.rb +0 -121
  37. data/lib/the_role/modules/user_model.rb +0 -31
@@ -1,16 +0,0 @@
1
- require 'the_role'
2
- require 'rails'
3
-
4
- module TheRole
5
- class Engine < Rails::Engine
6
- initializer "TheRole precompile hook", :group => :all do |app|
7
- app.config.assets.precompile += %w( admin_the_role.js admin_the_role.css )
8
- end
9
-
10
- config.to_prepare do
11
- Role.send :include, TheRole::RoleModel if the_class_exists? :Role
12
- User.send :include, TheRole::UserModel if the_class_exists? :User
13
- ApplicationController.send :include, TheRole::Requires if the_class_exists? :ApplicationController
14
- end
15
- end
16
- end
@@ -1,30 +0,0 @@
1
- module TheRole
2
- module Base
3
- def has_section? section_name
4
- hash = role_hash
5
- section_name = param_prepare section_name
6
- return true if hash[section_name]
7
- false
8
- end
9
-
10
- def has_role? section_name, rule_name
11
- hash = role_hash
12
- section_name = param_prepare(section_name)
13
- rule_name = param_prepare(rule_name)
14
- return true if hash['system'] and hash['system']['administrator']
15
- return true if hash['moderator'] and hash['moderator'][section_name]
16
- return false unless hash[section_name]
17
- return false unless hash[section_name].key? rule_name
18
- hash[section_name][rule_name]
19
- end
20
-
21
- def moderator? section_name
22
- section_name = param_prepare(section_name)
23
- has_role? section_name, 'any_crazy_name'
24
- end
25
-
26
- def admin?
27
- has_role? 'any_crazy_name', 'any_crazy_name'
28
- end
29
- end
30
- end
@@ -1,17 +0,0 @@
1
- module TheRole
2
- module Requires
3
- private
4
- def role_access_denied
5
- flash[:error] = t('the_role.access_denied')
6
- redirect_to root_path
7
- end
8
-
9
- def role_required
10
- role_access_denied unless current_user.has_role?(controller_name, action_name)
11
- end
12
-
13
- def owner_required
14
- role_access_denied unless current_user.owner?(@ownership_checking_object)
15
- end
16
- end
17
- end
@@ -1,121 +0,0 @@
1
- module TheRole
2
- module RoleModel
3
- include TheRole::Base
4
- include TheRole::ParamHelper
5
-
6
- def role_hash; to_hash; end
7
- alias_method :has?, :has_role?
8
-
9
- def has_section? section_name
10
- section_name = param_prepare(section_name)
11
- to_hash.key? section_name
12
- end
13
-
14
- def self.included(base)
15
- base.class_eval do
16
- attr_accessible :name, :title, :description, :the_role
17
-
18
- has_many :users
19
- validates :name, :presence => true, :uniqueness => true
20
- validates :title, :presence => true, :uniqueness => true
21
- validates :description, :presence => true
22
-
23
- before_create do
24
- self.name = param_prepare(name)
25
- self.the_role = {}.to_json if self.the_role.blank?
26
- end
27
-
28
- # C
29
-
30
- def create_section section_name = nil
31
- return false unless section_name
32
- role = to_hash
33
- section_name = param_prepare(section_name)
34
- return false if section_name.blank?
35
- return true if role[section_name]
36
- role[section_name] = {}
37
- update_attributes(:the_role => role.to_json)
38
- end
39
-
40
- def create_rule section_name, rule_name
41
- return false if rule_name.blank?
42
- return false unless create_section(section_name)
43
- role = to_hash
44
- rule_name = param_prepare(rule_name)
45
- section_name = param_prepare(section_name)
46
- return true if role[section_name][rule_name]
47
- role[section_name][rule_name] = false
48
- update_attributes(:the_role => role.to_json)
49
- end
50
-
51
- # R
52
-
53
- def to_hash
54
- begin JSON.load(the_role) rescue {} end
55
- end
56
-
57
- def to_json
58
- the_role
59
- end
60
-
61
- # U
62
-
63
- # source_hash will be reset to false
64
- # except true items from new_role_hash
65
- # all keys will become 'strings'
66
- # look at lib/the_role/hash.rb to find definition of *underscorify_keys* method
67
- def update_role new_role_hash
68
- new_role_hash = new_role_hash.try(:to_hash) || {}
69
- new_role = new_role_hash.underscorify_keys
70
- role = to_hash.underscorify_keys.deep_reset(false)
71
- role.deep_merge! new_role
72
- update_attributes(:the_role => role.to_json)
73
- end
74
-
75
- def rule_on section_name, rule_name
76
- role = to_hash
77
- rule_name = param_prepare(rule_name)
78
- section_name = param_prepare(section_name)
79
- return false unless role[section_name]
80
- return false unless role[section_name].key? rule_name
81
- return true if role[section_name][rule_name]
82
- role[section_name][rule_name] = true
83
- update_attributes(:the_role => role.to_json)
84
- end
85
-
86
- def rule_off section_name, rule_name
87
- role = to_hash
88
- rule_name = param_prepare(rule_name)
89
- section_name = param_prepare(section_name)
90
- return false unless role[section_name]
91
- return false unless role[section_name].key? rule_name
92
- return true unless role[section_name][rule_name]
93
- role[section_name][rule_name] = false
94
- update_attributes(:the_role => role.to_json)
95
- end
96
-
97
- # D
98
-
99
- def delete_section section_name = nil
100
- return false unless section_name
101
- role = to_hash
102
- section_name = param_prepare(section_name)
103
- return false if section_name.blank?
104
- return false unless role[section_name]
105
- role.delete section_name
106
- update_attributes(:the_role => role.to_json)
107
- end
108
-
109
- def delete_rule section_name, rule_name
110
- role = to_hash
111
- rule_name = param_prepare(rule_name)
112
- section_name = param_prepare(section_name)
113
- return false unless role[section_name]
114
- return false unless role[section_name].key? rule_name
115
- role[section_name].delete rule_name
116
- update_attributes(:the_role => role.to_json)
117
- end
118
- end
119
- end
120
- end
121
- end
@@ -1,31 +0,0 @@
1
- module TheRole
2
- module UserModel
3
- include TheRole::Base
4
- include TheRole::ParamHelper
5
- def role_hash; @role_hash ||= role.to_hash; end
6
-
7
- # FALSE if object is nil
8
- # If object is a USER - check for youself
9
- # Check for owner field - :user_id
10
- # Check for owner _object_ if owner field is not :user_id
11
- def owner? obj
12
- return false unless obj
13
- return true if admin?
14
-
15
- section_name = obj.class.to_s.tableize
16
- return true if moderator?(section_name)
17
-
18
- return id == obj.id if obj.is_a?(User)
19
- return id == obj[:user_id] if obj[:user_id]
20
- return id == obj[:user][:id] if obj[:user]
21
- false
22
- end
23
-
24
- def self.included(base)
25
- base.class_eval do
26
- belongs_to :role
27
- after_save { |user| user.instance_variable_set(:@role_hash, nil) }
28
- end
29
- end
30
- end
31
- end