activeaclplus 0.3.1 → 0.4.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.
- data/CHANGELOG +12 -0
- data/README.rdoc +125 -49
- data/Rakefile +13 -14
- data/{generators/active_acl/templates → app}/controllers/privileges_controller.rb +1 -1
- data/{lib → app/models}/active_acl/acl.rb +5 -5
- data/{lib → app/models}/active_acl/acl_section.rb +3 -3
- data/{lib → app/models}/active_acl/controller_action.rb +1 -1
- data/{lib → app/models}/active_acl/controller_group.rb +1 -1
- data/{lib → app/models}/active_acl/privilege.rb +0 -0
- data/{lib → app/models}/active_acl/requester_group_link.rb +0 -0
- data/{lib → app/models}/active_acl/requester_link.rb +0 -0
- data/{lib → app/models}/active_acl/target_group_link.rb +0 -0
- data/{lib → app/models}/active_acl/target_link.rb +0 -0
- data/{generators/active_acl/templates/views → app/view}/privileges/_privilege_form.rhtml +0 -0
- data/{generators/active_acl/templates/views → app/view}/privileges/edit.rhtml +0 -0
- data/{generators/active_acl/templates/views → app/view}/privileges/list.rhtml +0 -0
- data/db/migrate/001_base_table_setup.rb +7 -4
- data/init.rb +7 -1
- data/lib/active_acl/acts_as_access_group.rb +17 -22
- data/lib/active_acl/acts_as_access_object.rb +41 -208
- data/lib/active_acl/base.rb +17 -0
- data/lib/active_acl/cache/memcache_adapter.rb +12 -10
- data/lib/active_acl/cache/no_cache_adapter.rb +5 -5
- data/lib/active_acl/db/active_record_adapter.rb +3 -3
- data/lib/active_acl/db/mysql_adapter.rb +2 -2
- data/lib/active_acl/grant.rb +38 -0
- data/lib/active_acl/handler/nested_set.rb +33 -0
- data/lib/active_acl/handler/object_handler.rb +250 -0
- data/lib/active_acl/load_controller_actions.rb +1 -3
- data/lib/active_acl/privilege_const_set.rb +2 -2
- data/lib/active_acl.rb +11 -5
- metadata +35 -27
- data/generators/active_acl/active_acl_generator.rb +0 -29
@@ -0,0 +1,250 @@
|
|
1
|
+
module ActiveAcl #:nodoc:
|
2
|
+
module Acts #:nodoc:
|
3
|
+
module AccessObject #:nodoc:
|
4
|
+
|
5
|
+
# handels grouped objects
|
6
|
+
# the group is a nested_set
|
7
|
+
class ObjectHandler #:nodoc:
|
8
|
+
attr_reader :klass,:group_class_name,:join_table,:group_table_name,
|
9
|
+
:foreign_key,:association_foreign_key
|
10
|
+
def initialize(klass,options={})
|
11
|
+
@klass = klass
|
12
|
+
if options[:grouped_by]
|
13
|
+
@group_class_name = options[:grouped_by].to_s.classify
|
14
|
+
@group_table_name=@group_class_name.constantize.table_name
|
15
|
+
@join_table = options[:join_table] || [klass.name.pluralize.underscore.gsub(/\//,'_'), group_class_name.pluralize.underscore.gsub(/\//,'_')].sort.join('_')
|
16
|
+
@foreign_key = options[:foreign_key] || "#{klass.name.demodulize.underscore}_id"
|
17
|
+
@association_foreign_key = options[:association_foreign_key] || "#{group_class_name.demodulize.underscore}_id"
|
18
|
+
@habtm = options[:habtm] || (options[:grouped_by].to_s.demodulize.singularize != options[:grouped_by].to_s.demodulize)
|
19
|
+
end
|
20
|
+
|
21
|
+
#set the SQL fragments
|
22
|
+
requester_query
|
23
|
+
target_query
|
24
|
+
end
|
25
|
+
def habtm?
|
26
|
+
@habtm
|
27
|
+
end
|
28
|
+
def grouped?
|
29
|
+
!!@group_class_name
|
30
|
+
end
|
31
|
+
|
32
|
+
def klass_name
|
33
|
+
klass.base_class.name
|
34
|
+
end
|
35
|
+
def group_handler
|
36
|
+
ActiveAcl::GROUP_CLASSES[@group_class_name]
|
37
|
+
end
|
38
|
+
|
39
|
+
#checks the privilege of a requester on a target (optional)
|
40
|
+
def has_privilege?(requester,privilege,target=nil)
|
41
|
+
value = get_cached(requester,privilege,target)
|
42
|
+
|
43
|
+
return value unless value.nil? #got the cached and return
|
44
|
+
#todo check cash l2
|
45
|
+
|
46
|
+
vars={'requester_id' => requester.id}
|
47
|
+
sql = ''
|
48
|
+
sql << query_r_select
|
49
|
+
if target
|
50
|
+
t_handler=target.active_acl_handler
|
51
|
+
|
52
|
+
sql << t_handler.query_t_select
|
53
|
+
sql << "\n WHERE "
|
54
|
+
sql << query_r_where_3d
|
55
|
+
sql << t_handler.query_t_where
|
56
|
+
sql << "\n ORDER BY "
|
57
|
+
|
58
|
+
#TODO: ordering is a mess (use an array?)
|
59
|
+
order = (grouped? ? order_by_3d : [])
|
60
|
+
if t_handler.grouped?
|
61
|
+
order << "(CASE WHEN t_g_links.acl_id IS NULL THEN 0 ELSE 1 END) ASC"
|
62
|
+
order << t_handler.group_handler.order_by(target,true)
|
63
|
+
end
|
64
|
+
order << 'acls.updated_at DESC'
|
65
|
+
sql << order.join(',')
|
66
|
+
|
67
|
+
sql << " LIMIT 1"
|
68
|
+
vars['privilege_id'] = privilege.id
|
69
|
+
vars['target_id'] = target.id
|
70
|
+
vars['target_type'] = target.class.base_class.name
|
71
|
+
else
|
72
|
+
sql << " WHERE "
|
73
|
+
sql << query_r_where_2d
|
74
|
+
sql << "\n ORDER BY "
|
75
|
+
sql << order_by_2d
|
76
|
+
end
|
77
|
+
|
78
|
+
#replacing the vars in the SQL
|
79
|
+
sql=sql.gsub(/%{[^}]+}/) do |var|
|
80
|
+
vars[var[2..-2]] || var
|
81
|
+
end
|
82
|
+
|
83
|
+
results = ActiveAcl::OPTIONS[:db].query(sql) #get the query from the db
|
84
|
+
value=set_cached(requester,privilege,target,results)
|
85
|
+
return value
|
86
|
+
end
|
87
|
+
#gets the instance cache from the background store or a hash
|
88
|
+
def get_instance_cache(requester)
|
89
|
+
cache.get(requester_cache_id(requester)) || {}
|
90
|
+
end
|
91
|
+
#destroy the 2nd level cache
|
92
|
+
def delete_cached(requester)
|
93
|
+
cache.delete(requester_cache_id(requester))
|
94
|
+
end
|
95
|
+
|
96
|
+
attr_reader :query_t_select,:query_t_where
|
97
|
+
|
98
|
+
#Things go private from here ----------------
|
99
|
+
private
|
100
|
+
def cache
|
101
|
+
ActiveAcl::OPTIONS[:cache]
|
102
|
+
end
|
103
|
+
|
104
|
+
#builds a instance_cache key for a query
|
105
|
+
def query_id(requester,privilege,target)
|
106
|
+
privilege_id = (privilege.kind_of?(ActiveAcl::Privilege) ? privilege.id : privilege)
|
107
|
+
[privilege_id, klass.base_class.name, requester.id, (target ? target.class.base_class.name : ''), (target ? target.id.to_s : '')].join('-')
|
108
|
+
end
|
109
|
+
|
110
|
+
#builds the cache key for a requester for beackground cache
|
111
|
+
def requester_cache_id(requester)
|
112
|
+
'active_acl_instance-' + klass.base_class.name + '-' + requester.id.to_s
|
113
|
+
end
|
114
|
+
|
115
|
+
# Caching is done on different levels:
|
116
|
+
# Requesting a 2d privilege should fill the instance cache with all 2d privileges
|
117
|
+
# Requesting a 3d should be stored in the instance cache
|
118
|
+
# changing the instance cache stores it to the backstore (if any exists)
|
119
|
+
def get_cached(requester,privilege,target)
|
120
|
+
|
121
|
+
instance_cache=requester.active_acl_instance_cache
|
122
|
+
q_id=query_id(requester,privilege,target)
|
123
|
+
# try to get from instance cache
|
124
|
+
if (value=instance_cache[q_id]).nil? #cache miss?
|
125
|
+
if target.nil? && requester.active_acl_cached_2d?
|
126
|
+
Rails.logger.debug 'ACTIVE_ACL::INSTANCE_CACHE::DENY ' + q_id
|
127
|
+
return false #it should be cached but it's not there: DENY
|
128
|
+
else
|
129
|
+
return nil #we don't cache all 3d acl: DB LOOKUP
|
130
|
+
end
|
131
|
+
else #found in cache: return the results
|
132
|
+
Rails.logger.debug 'ACTIVE_ACL::INSTANCE_CACHE::' + (value ? 'GRANT ' : 'DENY ') + q_id
|
133
|
+
return value
|
134
|
+
end
|
135
|
+
nil
|
136
|
+
end
|
137
|
+
|
138
|
+
def set_cached(requester,privilege,target,results)
|
139
|
+
|
140
|
+
this_query_id=query_id(requester,privilege,target)
|
141
|
+
instance_cache=requester.active_acl_instance_cache
|
142
|
+
|
143
|
+
if target.nil? #no target? then results are all 2d privileges of the requester
|
144
|
+
last_privilege_value = nil
|
145
|
+
results.each do |row|
|
146
|
+
if row['privilege_id'] != last_privilege_value
|
147
|
+
last_privilege_value = row['privilege_id']
|
148
|
+
q_id=query_id(requester,privilege,target)
|
149
|
+
#TODO: put the into the db handler
|
150
|
+
v=((row['allow'] == '1') or (row['allow'] == 't'))
|
151
|
+
instance_cache[q_id] = v
|
152
|
+
end
|
153
|
+
end
|
154
|
+
requester.active_acl_cached_2d! #mark the cache as cached (at least 2d)
|
155
|
+
# the result should be in the cache now or we return false
|
156
|
+
value=instance_cache[this_query_id] || false
|
157
|
+
else #3d request?
|
158
|
+
if results.empty?
|
159
|
+
value=false
|
160
|
+
instance_cache[this_query_id] = value
|
161
|
+
else #3d and a hit
|
162
|
+
value = ((results[0]['allow'].to_s == '1') or (results[0]['allow'].to_s == 't'))
|
163
|
+
instance_cache[this_query_id] = value
|
164
|
+
end
|
165
|
+
end
|
166
|
+
raise "something went realy wrong!" if value.nil?
|
167
|
+
|
168
|
+
#cache the whole instance cache
|
169
|
+
cache.set(requester_cache_id(requester),instance_cache,ActiveAcl::OPTIONS[:cache_privilege_timeout])
|
170
|
+
|
171
|
+
value
|
172
|
+
end
|
173
|
+
|
174
|
+
# build ACL query strings once,
|
175
|
+
# so we don't need to do this on every request
|
176
|
+
# SQL:
|
177
|
+
# we always need acl,and privileges, and requester_links
|
178
|
+
# we need the target_links if its a 3d query
|
179
|
+
# we need the target_groups if the it's a 3d query and the target is grouped
|
180
|
+
# we need the requester_groups if the requester is grouped
|
181
|
+
# the ordering depens on 2d/3d
|
182
|
+
# We'll build the SQL on demand and cache it so it'll
|
183
|
+
# be a function of: requester,target,privilege
|
184
|
+
attr_reader :query_r_select, :query_r_where_2d, :query_r_where_3d, :order_by_3d,:order_by_2d
|
185
|
+
def requester_query
|
186
|
+
@query_r_select = <<-QUERY
|
187
|
+
SELECT acls.id, acls.allow, privileges.id AS privilege_id FROM #{ActiveAcl::OPTIONS[:acls_table]} acls
|
188
|
+
LEFT JOIN #{ActiveAcl::OPTIONS[:acls_privileges_table]} acls_privileges ON acls_privileges.acl_id=acls.id
|
189
|
+
LEFT JOIN #{ActiveAcl::OPTIONS[:privileges_table]} privileges ON privileges.id = acls_privileges.privilege_id
|
190
|
+
LEFT JOIN #{ActiveAcl::OPTIONS[:requester_links_table]} r_links ON r_links.acl_id=acls.id
|
191
|
+
QUERY
|
192
|
+
if grouped?
|
193
|
+
requester_groups_table = group_class_name.constantize.table_name
|
194
|
+
requester_group_type = group_class_name.constantize.name
|
195
|
+
|
196
|
+
@query_r_select << "
|
197
|
+
LEFT JOIN #{ActiveAcl::OPTIONS[:requester_group_links_table]} r_g_links ON acls.id = r_g_links.acl_id AND r_g_links.requester_group_type = '#{requester_group_type}'
|
198
|
+
LEFT JOIN #{requester_groups_table} r_groups ON r_g_links.requester_group_id = r_groups.id
|
199
|
+
"
|
200
|
+
end
|
201
|
+
|
202
|
+
@query_r_where_3d = "acls.enabled = #{klass.connection.quote(true)} AND (privileges.id = %{privilege_id}) "
|
203
|
+
@query_r_where_2d = "acls.enabled = #{klass.connection.quote(true)}"
|
204
|
+
query = " AND ((r_links.requester_id=%{requester_id}
|
205
|
+
AND r_links.requester_type='#{klass.base_class.name}')"
|
206
|
+
if grouped?
|
207
|
+
|
208
|
+
query << " OR (r_g_links.requester_group_id IN #{group_handler.group_sql(self)})) "
|
209
|
+
else
|
210
|
+
query << ")"
|
211
|
+
end
|
212
|
+
@query_r_where_3d << query
|
213
|
+
@query_r_where_2d << query
|
214
|
+
|
215
|
+
|
216
|
+
#@query_r_where_2d << '(t_g_links.acl_id IS NULL)) '
|
217
|
+
@order_by_3d = []
|
218
|
+
@order_by_3d << "(CASE WHEN r_g_links.acl_id IS NULL THEN 0 ELSE 1 END) ASC"
|
219
|
+
@order_by_3d << group_handler.order_by(self) if grouped?
|
220
|
+
|
221
|
+
|
222
|
+
|
223
|
+
#TODO ordering of groups
|
224
|
+
@order_by_2d = 'privileges.id,'
|
225
|
+
@order_by_2d << "(CASE WHEN r_g_links.acl_id IS NULL THEN 0 ELSE 1 END) ASC," if grouped?
|
226
|
+
@order_by_2d << "acls.updated_at DESC"
|
227
|
+
end
|
228
|
+
|
229
|
+
def target_query
|
230
|
+
@query_t_select = " LEFT JOIN #{ActiveAcl::OPTIONS[:target_links_table]} t_links ON t_links.acl_id=acls.id"
|
231
|
+
if grouped?
|
232
|
+
target_groups_table = @group_class_name.constantize.table_name
|
233
|
+
target_group_type = @group_class_name.constantize.name
|
234
|
+
|
235
|
+
@query_t_select << " LEFT JOIN #{ActiveAcl::OPTIONS[:target_group_links_table]} t_g_links ON t_g_links.acl_id=acls.id
|
236
|
+
AND t_g_links.target_group_type = '#{target_group_type}'
|
237
|
+
LEFT JOIN #{target_groups_table} t_groups ON t_groups.id=t_g_links.target_group_id"
|
238
|
+
end
|
239
|
+
@query_t_where = " AND ((t_links.target_id=%{target_id}
|
240
|
+
AND t_links.target_type = '%{target_type}' )"
|
241
|
+
if grouped?
|
242
|
+
@query_t_where << " OR t_g_links.target_group_id IN #{group_handler.group_sql(self,true)})"
|
243
|
+
else
|
244
|
+
@query_t_where << ")"
|
245
|
+
end
|
246
|
+
end
|
247
|
+
end
|
248
|
+
end
|
249
|
+
end
|
250
|
+
end
|
@@ -1,5 +1,3 @@
|
|
1
|
-
#require 'active_support'
|
2
|
-
#require 'action_view'
|
3
1
|
|
4
2
|
class ActionController::Base
|
5
3
|
# Get the access object for the current action.
|
@@ -14,7 +12,7 @@ class ActionController::Base
|
|
14
12
|
|
15
13
|
# Overrides method_added, so the needed ActiveAcl::ControllerAction is loaded/created
|
16
14
|
# when the action gets added to the controller.
|
17
|
-
def self.method_added(action)
|
15
|
+
def self.method_added(action) #:nodoc:
|
18
16
|
method_added_before_active_acl_controller_action_loading(action)
|
19
17
|
ActiveAcl::CONTROLLERS[self.name] ||= {}
|
20
18
|
|
@@ -9,10 +9,10 @@ class ::Module
|
|
9
9
|
result = []
|
10
10
|
constant.is_a?(Hash) ? constant_hash = constant : constant_hash = {constant.to_s => nil}
|
11
11
|
constant_hash.each_pair do |constant_name, description|
|
12
|
-
if !const_defined?(constant_name.to_s)
|
12
|
+
if !const_defined?(constant_name.to_s) || force_reload
|
13
13
|
remove_const(constant_name.to_s) if const_defined?(constant_name.to_s)
|
14
14
|
privilege = ActiveAcl::Privilege.find_by_section_and_value(self.name, constant_name.to_s)
|
15
|
-
privilege = ActiveAcl::Privilege.create(:section => self.name, :value => constant_name.to_s, :description => description) unless privilege
|
15
|
+
privilege = ActiveAcl::Privilege.create!(:section => self.name, :value => constant_name.to_s, :description => description) unless privilege
|
16
16
|
const_set(constant_name.to_s, privilege)
|
17
17
|
result << privilege
|
18
18
|
end
|
data/lib/active_acl.rb
CHANGED
@@ -1,26 +1,32 @@
|
|
1
1
|
module ActiveAcl
|
2
|
+
|
3
|
+
|
2
4
|
end
|
3
5
|
|
4
6
|
# plugin dependency
|
5
7
|
require 'has_many_polymorphs'
|
6
8
|
|
7
|
-
ActiveAcl::CONTROLLERS = {}
|
8
|
-
|
9
9
|
require 'active_acl/options'
|
10
|
+
require 'active_acl/base'
|
11
|
+
|
10
12
|
require 'active_acl/privilege_const_set'
|
13
|
+
require 'active_acl/grant'
|
14
|
+
|
15
|
+
require 'active_acl/handler/object_handler'
|
16
|
+
require 'active_acl/handler/nested_set'
|
11
17
|
require 'active_acl/db/active_record_adapter'
|
12
18
|
require 'active_acl/cache/no_cache_adapter'
|
13
19
|
require 'active_acl/load_controller_actions'
|
14
20
|
require 'active_acl/acts_as_access_object'
|
15
21
|
require 'active_acl/acts_as_access_group'
|
16
|
-
|
17
22
|
require 'active_acl/load_files_from'
|
18
23
|
|
24
|
+
|
19
25
|
# call class so its loaded and registered as access object
|
20
26
|
# wrap in rescue block so migrations don't fail
|
21
27
|
begin
|
22
28
|
ActiveAcl::ControllerAction
|
23
29
|
ActiveAcl::ControllerGroup
|
24
|
-
rescue
|
25
|
-
|
30
|
+
rescue StandardError => e
|
31
|
+
puts "Error #{e.message} #{e.backtrace.join("\n")}(need migrations?)"
|
26
32
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: activeaclplus
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.4.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Peter Schrammel
|
@@ -10,7 +10,7 @@ autorequire:
|
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
12
|
|
13
|
-
date:
|
13
|
+
date: 2009-03-04 00:00:00 +01:00
|
14
14
|
default_executable:
|
15
15
|
dependencies:
|
16
16
|
- !ruby/object:Gem::Dependency
|
@@ -30,8 +30,10 @@ executables: []
|
|
30
30
|
|
31
31
|
extensions: []
|
32
32
|
|
33
|
-
extra_rdoc_files:
|
34
|
-
|
33
|
+
extra_rdoc_files:
|
34
|
+
- README.rdoc
|
35
|
+
- LICENSE
|
36
|
+
- CHANGELOG
|
35
37
|
files:
|
36
38
|
- lib/active_acl
|
37
39
|
- lib/active_acl/db
|
@@ -40,45 +42,51 @@ files:
|
|
40
42
|
- lib/active_acl/cache
|
41
43
|
- lib/active_acl/cache/no_cache_adapter.rb
|
42
44
|
- lib/active_acl/cache/memcache_adapter.rb
|
43
|
-
- lib/active_acl/
|
44
|
-
- lib/active_acl/
|
45
|
-
- lib/active_acl/
|
45
|
+
- lib/active_acl/handler
|
46
|
+
- lib/active_acl/handler/object_handler.rb
|
47
|
+
- lib/active_acl/handler/nested_set.rb
|
46
48
|
- lib/active_acl/load_files_from.rb
|
47
|
-
- lib/active_acl/acts_as_access_object.rb
|
48
|
-
- lib/active_acl/privilege.rb
|
49
49
|
- lib/active_acl/options.rb
|
50
|
-
- lib/active_acl/requester_link.rb
|
51
|
-
- lib/active_acl/controller_group.rb
|
52
|
-
- lib/active_acl/acl.rb
|
53
50
|
- lib/active_acl/load_controller_actions.rb
|
54
|
-
- lib/active_acl/target_link.rb
|
55
51
|
- lib/active_acl/privilege_const_set.rb
|
56
|
-
- lib/active_acl/requester_group_link.rb
|
57
52
|
- lib/active_acl/acts_as_access_group.rb
|
53
|
+
- lib/active_acl/acts_as_access_object.rb
|
54
|
+
- lib/active_acl/grant.rb
|
55
|
+
- lib/active_acl/base.rb
|
58
56
|
- lib/active_acl.rb
|
59
57
|
- tasks/active_acl_base_tasks.rake
|
60
|
-
- generators/active_acl
|
61
|
-
- generators/active_acl/templates
|
62
|
-
- generators/active_acl/templates/controllers
|
63
|
-
- generators/active_acl/templates/controllers/privileges_controller.rb
|
64
|
-
- generators/active_acl/templates/views
|
65
|
-
- generators/active_acl/templates/views/privileges
|
66
|
-
- generators/active_acl/templates/views/privileges/list.rhtml
|
67
|
-
- generators/active_acl/templates/views/privileges/edit.rhtml
|
68
|
-
- generators/active_acl/templates/views/privileges/_privilege_form.rhtml
|
69
|
-
- generators/active_acl/active_acl_generator.rb
|
70
58
|
- db/migrate
|
71
59
|
- db/migrate/001_base_table_setup.rb
|
60
|
+
- app/models
|
61
|
+
- app/models/active_acl
|
62
|
+
- app/models/active_acl/acl_section.rb
|
63
|
+
- app/models/active_acl/controller_group.rb
|
64
|
+
- app/models/active_acl/privilege.rb
|
65
|
+
- app/models/active_acl/requester_group_link.rb
|
66
|
+
- app/models/active_acl/requester_link.rb
|
67
|
+
- app/models/active_acl/target_group_link.rb
|
68
|
+
- app/models/active_acl/target_link.rb
|
69
|
+
- app/models/active_acl/controller_action.rb
|
70
|
+
- app/models/active_acl/acl.rb
|
71
|
+
- app/controllers
|
72
|
+
- app/controllers/privileges_controller.rb
|
73
|
+
- app/view
|
74
|
+
- app/view/privileges
|
75
|
+
- app/view/privileges/list.rhtml
|
76
|
+
- app/view/privileges/edit.rhtml
|
77
|
+
- app/view/privileges/_privilege_form.rhtml
|
72
78
|
- init.rb
|
73
79
|
- install.rb
|
74
|
-
- LICENSE
|
75
80
|
- Rakefile
|
76
81
|
- README.rdoc
|
82
|
+
- LICENSE
|
77
83
|
- CHANGELOG
|
78
84
|
has_rdoc: true
|
79
85
|
homepage: http://activeaclplus.rubyforge.org/
|
80
86
|
post_install_message:
|
81
87
|
rdoc_options:
|
88
|
+
- --title
|
89
|
+
- Active Acl Plus
|
82
90
|
- --main
|
83
91
|
- README.rdoc
|
84
92
|
require_paths:
|
@@ -98,9 +106,9 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
98
106
|
requirements: []
|
99
107
|
|
100
108
|
rubyforge_project: activeaclplus
|
101
|
-
rubygems_version: 1.
|
109
|
+
rubygems_version: 1.3.1
|
102
110
|
signing_key:
|
103
111
|
specification_version: 2
|
104
|
-
summary:
|
112
|
+
summary: A new Version (0.4.0) of ActiveAclPlus is available.
|
105
113
|
test_files: []
|
106
114
|
|
@@ -1,29 +0,0 @@
|
|
1
|
-
class ActiveAclGenerator < Rails::Generator::Base
|
2
|
-
attr_accessor :privileges_class_name, :privileges_file_name, :privileges_view_dir
|
3
|
-
|
4
|
-
def initialize(*runtime_args)
|
5
|
-
super(*runtime_args)
|
6
|
-
@privileges_class_name = (args[0] || 'PrivilegesController')
|
7
|
-
@privileges_file_name = @privileges_class_name.underscore
|
8
|
-
@privileges_view_dir = File.join('app', 'views', @privileges_file_name.gsub('_controller', ''))
|
9
|
-
end
|
10
|
-
|
11
|
-
def manifest
|
12
|
-
record do |m|
|
13
|
-
# Stylesheet, controllers and public directories.
|
14
|
-
m.directory File.join('public', 'stylesheets')
|
15
|
-
m.directory File.join('app', 'controllers')
|
16
|
-
m.directory File.join('app', 'views')
|
17
|
-
m.directory privileges_view_dir
|
18
|
-
|
19
|
-
m.template 'controllers/privileges_controller.rb', File.join('app', 'controllers', "#{privileges_file_name}.rb")
|
20
|
-
m.file 'views/privileges/_privilege_form.rhtml', File.join(privileges_view_dir, '_privilege_form.rhtml')
|
21
|
-
m.file 'views/privileges/edit.rhtml', File.join(privileges_view_dir, 'edit.rhtml')
|
22
|
-
m.file 'views/privileges/list.rhtml', File.join(privileges_view_dir, 'list.rhtml')
|
23
|
-
m.migration_template('../../../db/migrate/001_base_table_setup.rb',
|
24
|
-
'db/migrate',
|
25
|
-
:assigns => {:migration_name => "BaseTableSetup"},
|
26
|
-
:migration_file_name => "base_table_setup")
|
27
|
-
end
|
28
|
-
end
|
29
|
-
end
|