logical_authz 0.1.6
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/app/controllers/groups_controller.rb +77 -0
- data/app/controllers/groups_users_controller.rb +27 -0
- data/app/controllers/permissions_controller.rb +63 -0
- data/app/helpers/logical_authz_helper.rb +158 -0
- data/app/views/groups/_controls.html.haml +18 -0
- data/app/views/groups/_form.html.haml +4 -0
- data/app/views/groups/create.rjs +1 -0
- data/app/views/groups/edit.html.haml +1 -0
- data/app/views/groups/index.html.haml +14 -0
- data/app/views/groups/new.html.haml +2 -0
- data/app/views/groups/show.html.haml +6 -0
- data/app/views/permissions/_controls.html.haml +18 -0
- data/app/views/permissions/_form.html.haml +8 -0
- data/app/views/permissions/create.rjs +1 -0
- data/app/views/permissions/edit.html.haml +1 -0
- data/app/views/permissions/index.html.haml +20 -0
- data/app/views/permissions/new.html.haml +2 -0
- data/config/initializers/activate.rb +1 -0
- data/generators/logical_authz/logical_authz_generator.rb +13 -0
- data/generators/logical_authz/templates/README +11 -0
- data/generators/logical_authz/templates/app/controllers/authz_controller.rb.erb +4 -0
- data/generators/logical_authz/templates/app/views/layouts/_explain_authz.html.haml.erb +21 -0
- data/generators/logical_authz_models/logical_authz_models_generator.rb +22 -0
- data/generators/logical_authz_routes/logical_authz_routes_generator.rb +12 -0
- data/generators/logical_authz_specs/logical_authz_specs_generator.rb +26 -0
- data/lib/logical_authz/access_control.rb +343 -0
- data/lib/logical_authz/application.rb +350 -0
- data/lib/logical_authz/authn_facade/authlogic.rb +13 -0
- data/lib/logical_authz/configuration.rb +64 -0
- data/lib/logical_authz/engine.rb +18 -0
- data/lib/logical_authz/generator.rb +22 -0
- data/lib/logical_authz/generators/controllers/generator.rb +15 -0
- data/lib/logical_authz/generators/controllers/templates/app/controllers/authz_controller.rb +6 -0
- data/lib/logical_authz/generators/models/generator.rb +109 -0
- data/lib/logical_authz/generators/models/templates/app/models/group.rb +33 -0
- data/lib/logical_authz/generators/models/templates/app/models/permission.rb +3 -0
- data/lib/logical_authz/generators/models/templates/config/initializers/logical_authz.rb +20 -0
- data/lib/logical_authz/generators/models/templates/db/seeds_logical_authz.rb +21 -0
- data/lib/logical_authz/generators/models/templates/migrations/create_groups.rb +12 -0
- data/lib/logical_authz/generators/models/templates/migrations/create_permissions.rb +15 -0
- data/lib/logical_authz/generators/models/templates/migrations/create_users_groups.rb +13 -0
- data/lib/logical_authz/generators/routes/generator.rb +21 -0
- data/lib/logical_authz/generators/specs/generator.rb +57 -0
- data/lib/logical_authz/generators/specs/templates/spec/controllers/groups_controller_spec.rb +102 -0
- data/lib/logical_authz/generators/specs/templates/spec/controllers/groups_users_controller_spec.rb +47 -0
- data/lib/logical_authz/generators/specs/templates/spec/controllers/permissions_controller_spec.rb +24 -0
- data/lib/logical_authz/generators/specs/templates/spec/factories/az_accounts.rb +7 -0
- data/lib/logical_authz/generators/specs/templates/spec/factories/az_groups.rb +7 -0
- data/lib/logical_authz/generators/specs/templates/spec/factories/permissions.rb +2 -0
- data/lib/logical_authz/generators/specs/templates/spec/helpers/logical_authz_helper_spec.rb +90 -0
- data/lib/logical_authz/generators/specs/templates/spec/support/logical_authz.rb +1 -0
- data/lib/logical_authz/generators/specs/templates/spec/support/mock_auth.rb +30 -0
- data/lib/logical_authz/spec_helper.rb +75 -0
- data/lib/logical_authz.rb +110 -0
- data/lib/tasks/rspec.rake +15 -0
- data/spec/gem_test_suite.rb +17 -0
- data/spec/spec_helper.rb +43 -0
- metadata +127 -0
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
require 'logical_authz'
|
|
2
|
+
|
|
3
|
+
#TODO: R3 respond_with
|
|
4
|
+
class GroupsController < AuthzController
|
|
5
|
+
|
|
6
|
+
PER_PAGE = 20
|
|
7
|
+
|
|
8
|
+
# GET /groups
|
|
9
|
+
# GET /groups.xml
|
|
10
|
+
def index
|
|
11
|
+
@groups = Group.all
|
|
12
|
+
|
|
13
|
+
respond_to do |format|
|
|
14
|
+
format.html # index.html.erb
|
|
15
|
+
format.xml { render :xml => @groups }
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def edit
|
|
20
|
+
@group = Group.find(params[:id])
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def update
|
|
24
|
+
@group = Group.find(params[:id])
|
|
25
|
+
if @group.update_attributes(params[:group])
|
|
26
|
+
flash[:notice] = 'Group was successfully updated.'
|
|
27
|
+
redirect_to(@group)
|
|
28
|
+
else
|
|
29
|
+
render :action => "edit"
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
def show
|
|
34
|
+
@group = Group.find(params[:id])
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
# GET /groups/new
|
|
38
|
+
# GET /groups/new.xml
|
|
39
|
+
def new
|
|
40
|
+
@group = Group.new
|
|
41
|
+
|
|
42
|
+
respond_to do |format|
|
|
43
|
+
format.html # new.html.erb
|
|
44
|
+
format.xml { render :xml => @group }
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
# POST /groups
|
|
49
|
+
# POST /groups.xml
|
|
50
|
+
def create
|
|
51
|
+
@group = Group.new(params[:group])
|
|
52
|
+
|
|
53
|
+
respond_to do |format|
|
|
54
|
+
if @group.save
|
|
55
|
+
flash[:notice] = 'Group was successfully created.'
|
|
56
|
+
format.html { redirect_to(groups_path) }
|
|
57
|
+
format.xml { render :xml => @group, :status => :created, :location => @group }
|
|
58
|
+
else
|
|
59
|
+
format.html { render :action => "new" }
|
|
60
|
+
format.xml { render :xml => @group.errors, :status => :unprocessable_entity }
|
|
61
|
+
end
|
|
62
|
+
end
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
# DELETE /groups/1
|
|
66
|
+
# DELETE /groups/1.xml
|
|
67
|
+
def destroy
|
|
68
|
+
@group = Group.find(params[:id])
|
|
69
|
+
@group.destroy
|
|
70
|
+
|
|
71
|
+
respond_to do |format|
|
|
72
|
+
format.html { redirect_to(groups_url) }
|
|
73
|
+
format.xml { head :ok }
|
|
74
|
+
end
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
end
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
class GroupsUsersController < AuthzController
|
|
2
|
+
before_filter :get_instance_vars
|
|
3
|
+
|
|
4
|
+
def create
|
|
5
|
+
if @user && @group
|
|
6
|
+
@user.groups << @group
|
|
7
|
+
end
|
|
8
|
+
respond_to do |format|
|
|
9
|
+
format.html { redirect_to :back }
|
|
10
|
+
end
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def destroy
|
|
14
|
+
if @user && @group
|
|
15
|
+
@user.groups.delete(@group)
|
|
16
|
+
end
|
|
17
|
+
respond_to do |format|
|
|
18
|
+
format.html { redirect_to :back }
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
private
|
|
23
|
+
def get_instance_vars
|
|
24
|
+
@user = Group.member_class.find_by_id(params[:user_id])
|
|
25
|
+
@group = Group.find_by_id(params[:group_id])
|
|
26
|
+
end
|
|
27
|
+
end
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
|
|
2
|
+
class PermissionsController < AuthzController
|
|
3
|
+
needs_authorization
|
|
4
|
+
admin_authorized
|
|
5
|
+
|
|
6
|
+
before_filter :get_permission, :only => [:edit, :update, :destroy]
|
|
7
|
+
|
|
8
|
+
def index
|
|
9
|
+
@permissions = Permission.all
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def new
|
|
13
|
+
@permission = Permission.new
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def edit
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def update
|
|
20
|
+
if @permssion.update_attributes(params[:permission])
|
|
21
|
+
flash[:notice] = "Permission updated"
|
|
22
|
+
redirect_to permissions_path
|
|
23
|
+
else
|
|
24
|
+
render :action => :edit
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def destroy
|
|
29
|
+
@permission.try(:destroy)
|
|
30
|
+
redirect_to permissions_path
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
def create
|
|
34
|
+
group = Group.find_by_id(params[:group])
|
|
35
|
+
return if group.nil?
|
|
36
|
+
|
|
37
|
+
permission_selector = {
|
|
38
|
+
:controller => params[:p_controller],
|
|
39
|
+
:action => params[:p_action],
|
|
40
|
+
:subject_id => params[:object],
|
|
41
|
+
:group_id => group.id
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
if params["permission"] == "true"
|
|
45
|
+
Permission.create!(permission_selector)
|
|
46
|
+
else
|
|
47
|
+
perms = group.permissions.find(:all, :conditions => permission_selector)
|
|
48
|
+
perms.each {|perm| perm.destroy}
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
respond_to do |format|
|
|
52
|
+
format.js
|
|
53
|
+
format.html do
|
|
54
|
+
redirect_to :back
|
|
55
|
+
end
|
|
56
|
+
end
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
private
|
|
60
|
+
def get_permission
|
|
61
|
+
@permission = Permission.find_by_id(params[:id])
|
|
62
|
+
end
|
|
63
|
+
end
|
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
require 'logical_authz/configuration'
|
|
2
|
+
|
|
3
|
+
module LogicalAuthz
|
|
4
|
+
class << self
|
|
5
|
+
def laz_debug
|
|
6
|
+
if block_given? and LogicalAuthz::Configuration::debugging?
|
|
7
|
+
Rails::logger::debug do
|
|
8
|
+
msg = yield
|
|
9
|
+
String === msg ? msg : msg.inspect
|
|
10
|
+
end
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
module Helper
|
|
16
|
+
def laz_debug
|
|
17
|
+
if block_given?
|
|
18
|
+
LogicalAuthz::laz_debug{yield}
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def authorized?(criteria=nil)
|
|
23
|
+
criteria ||= {}
|
|
24
|
+
|
|
25
|
+
laz_debug{"Helper authorizing: #{LogicalAuthz.inspect_criteria(criteria)}"}
|
|
26
|
+
|
|
27
|
+
criteria = {
|
|
28
|
+
:controller => controller_path,
|
|
29
|
+
:action => action_name,
|
|
30
|
+
:id => params[:id]
|
|
31
|
+
}.merge(criteria)
|
|
32
|
+
criteria[:params] = criteria.dup
|
|
33
|
+
|
|
34
|
+
unless criteria.has_key?(:group) or criteria.has_key?(:user)
|
|
35
|
+
controller = case self
|
|
36
|
+
when ActionView::Base
|
|
37
|
+
self.controller
|
|
38
|
+
else
|
|
39
|
+
self #XXX ???
|
|
40
|
+
end
|
|
41
|
+
criteria[:user] = AuthnFacade.current_user(controller)
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
result = LogicalAuthz.is_authorized?(criteria)
|
|
45
|
+
|
|
46
|
+
return result
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
# returns an array of group names and ids (suitable for select_tag)
|
|
50
|
+
# for which <user> is not a member
|
|
51
|
+
def nonmembered_groups(user)
|
|
52
|
+
(LogicalAuthz::group_model.all - user.groups).map { |g| [ g.name, g.id ] }
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
def groups
|
|
56
|
+
LogicalAuthz::group_model.all.map do |group|
|
|
57
|
+
[group.name, group.id ]
|
|
58
|
+
end
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
def controller_pairs
|
|
62
|
+
controllers = ActionController::Routing::possible_controllers
|
|
63
|
+
controllers -= %w{rails/info application authz rails_info}
|
|
64
|
+
controllers.map{|c| [c.classify, c]}
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
def criteria_from_url(url, html_options = nil)
|
|
68
|
+
return nil if url.nil?
|
|
69
|
+
uri = URI.parse(url_for(url))
|
|
70
|
+
path = uri.path
|
|
71
|
+
querystring = uri.query
|
|
72
|
+
http_method = (html_options.nil? ? nil : html_options[:method]) || :get
|
|
73
|
+
begin
|
|
74
|
+
params = Rails.application.routes.recognize_path(path, :method => http_method)
|
|
75
|
+
rescue ActionController::RoutingError => ex
|
|
76
|
+
Rails.logger.info{"Asked to authorize url: #{html_options.inspect} - couldn't route: #{ex.class.name}: #{ex.message}"}
|
|
77
|
+
return nil
|
|
78
|
+
end
|
|
79
|
+
querystring.blank? ? params : params.merge(Rack::Utils.parse_query(querystring).symbolize_keys!)
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
def authorized_url?(options, html_options = nil)
|
|
83
|
+
html_options ||= {}
|
|
84
|
+
params = {}
|
|
85
|
+
if Hash === options
|
|
86
|
+
params = options
|
|
87
|
+
else
|
|
88
|
+
params = criteria_from_url(options)
|
|
89
|
+
end
|
|
90
|
+
if params.nil?
|
|
91
|
+
true #We can't work out where it is, so we have no opinion
|
|
92
|
+
#XXX: Shouldn't this be false?
|
|
93
|
+
else
|
|
94
|
+
authorized?(params)
|
|
95
|
+
end
|
|
96
|
+
end
|
|
97
|
+
|
|
98
|
+
def authorized_menu(*items)
|
|
99
|
+
yield(items) if items.all? do |item|
|
|
100
|
+
authorized_url? [*item].last
|
|
101
|
+
end
|
|
102
|
+
end
|
|
103
|
+
|
|
104
|
+
def link_to_if_authorized(name, options = nil, html_options = nil)
|
|
105
|
+
options ||= {}
|
|
106
|
+
html_options ||= {}
|
|
107
|
+
url = options
|
|
108
|
+
if(authorized_url?(url, html_options))
|
|
109
|
+
link_to(name, options, html_options)
|
|
110
|
+
else
|
|
111
|
+
if block_given?
|
|
112
|
+
yield
|
|
113
|
+
else
|
|
114
|
+
""
|
|
115
|
+
end
|
|
116
|
+
end
|
|
117
|
+
end
|
|
118
|
+
|
|
119
|
+
def button_to_if_authorized(name, options = {}, html_options = {})
|
|
120
|
+
url = options
|
|
121
|
+
if(authorized_url?(url, html_options))
|
|
122
|
+
button_to(name, options, html_options)
|
|
123
|
+
else
|
|
124
|
+
if block_given?
|
|
125
|
+
yield
|
|
126
|
+
else
|
|
127
|
+
""
|
|
128
|
+
end
|
|
129
|
+
end
|
|
130
|
+
end
|
|
131
|
+
|
|
132
|
+
def link_to_remote_if_authorized(name, options = {}, html_options = nil)
|
|
133
|
+
url = options[:url]
|
|
134
|
+
if(authorized_url?(url, html_options))
|
|
135
|
+
link_to_remote(name, options, html_options)
|
|
136
|
+
else
|
|
137
|
+
if block_given?
|
|
138
|
+
yield
|
|
139
|
+
else
|
|
140
|
+
""
|
|
141
|
+
end
|
|
142
|
+
end
|
|
143
|
+
end
|
|
144
|
+
|
|
145
|
+
def button_to_remote_if_authorized(name, options = {}, html_options = nil)
|
|
146
|
+
url = options[:url]
|
|
147
|
+
if(authorized_url?(url, html_options))
|
|
148
|
+
button_to_remote(name, options, html_options)
|
|
149
|
+
else
|
|
150
|
+
if block_given?
|
|
151
|
+
yield
|
|
152
|
+
else
|
|
153
|
+
""
|
|
154
|
+
end
|
|
155
|
+
end
|
|
156
|
+
end
|
|
157
|
+
end
|
|
158
|
+
end
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
-page ||= @page
|
|
2
|
+
|
|
3
|
+
- content_for(:aux) do
|
|
4
|
+
- page_block("Admin Tool: Permissions", :cssclass => "narrowcolumn admin") do
|
|
5
|
+
|
|
6
|
+
%p Set view and edit permissions on this page.
|
|
7
|
+
%table.listing
|
|
8
|
+
%tr
|
|
9
|
+
%th Group
|
|
10
|
+
%th View?
|
|
11
|
+
%th Edit?
|
|
12
|
+
|
|
13
|
+
- for group in Group.all
|
|
14
|
+
%tr
|
|
15
|
+
%td= h group.name
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
page.replace_html :permissions, :partial => 'permissions/controls', :locals => { :page => page }
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
= render :partial => "form"
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
-set_headline "Groups"
|
|
2
|
+
|
|
3
|
+
%ul.actions
|
|
4
|
+
%li= link_to_if_authorized("Create New Group", new_group_path)
|
|
5
|
+
|
|
6
|
+
%table.listing
|
|
7
|
+
%tr
|
|
8
|
+
%th Group Name
|
|
9
|
+
- @groups.each do |group|
|
|
10
|
+
%tr
|
|
11
|
+
%td= link_to_if_authorized(group.name, group_path(group))
|
|
12
|
+
%td
|
|
13
|
+
= link_to_if_authorized("Edit", edit_group_path(group))
|
|
14
|
+
= link_to_if_authorized("Delete", group_path(group), :method => :delete)
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
-page ||= @page
|
|
2
|
+
|
|
3
|
+
- content_for(:aux) do
|
|
4
|
+
- page_block("Admin Tool: Permissions", :cssclass => "narrowcolumn admin") do
|
|
5
|
+
|
|
6
|
+
%p Set view and edit permissions on this page.
|
|
7
|
+
%table.listing
|
|
8
|
+
%tr
|
|
9
|
+
%th Group
|
|
10
|
+
%th View?
|
|
11
|
+
%th Edit?
|
|
12
|
+
|
|
13
|
+
- for group in Group.all
|
|
14
|
+
%tr
|
|
15
|
+
%td= h group.name
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
= error_messages_for :permission
|
|
2
|
+
- form_for @permission, :url => permissions_path do |f|
|
|
3
|
+
= hidden_field_tag(:permission, true)
|
|
4
|
+
= labeled_input f, :group, :input => select(:permission, :group_id, groups)
|
|
5
|
+
= labeled_input f, :controller, :input => select(:permission, :controller, controller_pairs)
|
|
6
|
+
= labeled_input f, :action
|
|
7
|
+
= labeled_input f, :subject_id, :text => "id"
|
|
8
|
+
= unlabeled_submit(f)
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
page.replace_html :permissions, :partial => 'permissions/controls', :locals => { :page => page }
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
= render :partial => _form.html.haml
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
-set_headline "Permissions"
|
|
2
|
+
|
|
3
|
+
%ul.actions
|
|
4
|
+
%li= link_to_if_authorized("Grant New Permission", new_permission_path)
|
|
5
|
+
|
|
6
|
+
%table.listing
|
|
7
|
+
%tr
|
|
8
|
+
%th Group
|
|
9
|
+
%th Controller
|
|
10
|
+
%th Action
|
|
11
|
+
%th Object ID
|
|
12
|
+
- @permissions.each do |permission|
|
|
13
|
+
%tr
|
|
14
|
+
%td= permission.group.name
|
|
15
|
+
%td= permission.controller
|
|
16
|
+
%td= permission.action || "*"
|
|
17
|
+
%td= permission.subject_id || "*"
|
|
18
|
+
%td
|
|
19
|
+
= link_to_if_authorized("Edit", edit_permission_path(permission))
|
|
20
|
+
= link_to_if_authorized("Delete", permission_path(permission), :method => :delete)
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
require 'logical_authz'
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
class LogicalAuthzGenerator < LogicalAuthz::Generator
|
|
2
|
+
def manifest
|
|
3
|
+
record do |manifest|
|
|
4
|
+
manifest.dependency "logical_authz_models", [], options
|
|
5
|
+
manifest.dependency "logical_authz_specs", [], options
|
|
6
|
+
manifest.dependency "logical_authz_routes", [], options
|
|
7
|
+
|
|
8
|
+
manifest.template "app/controllers/authz_controller.rb.erb", "app/controllers/authz_controller.rb"
|
|
9
|
+
manifest.template "app/views/layouts/_explain_authz.html.haml", "app/views/layouts/_explain_authz.html.haml.erb"
|
|
10
|
+
manifest.readme "README"
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
end
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
- unless flash.has_key? :logical_authz_record
|
|
2
|
+
-# Authorization not required
|
|
3
|
+
- else
|
|
4
|
+
- if flash[:logical_authz_record][:result]
|
|
5
|
+
-# Authorization successful
|
|
6
|
+
- else
|
|
7
|
+
- laz_rec = flash[:logical_authz_record]
|
|
8
|
+
- if LogicalAuthz::AuthnFacade::current_user(controller).nil?
|
|
9
|
+
You aren't
|
|
10
|
+
= link_to("logged in", login_path)
|
|
11
|
+
- else
|
|
12
|
+
- case laz_rec[:reason]
|
|
13
|
+
- when :default, :rule_triggered
|
|
14
|
+
You aren't permitted to access
|
|
15
|
+
= laz_rec[:authz_path]
|
|
16
|
+
- when :no_authorization_needed
|
|
17
|
+
You were denied access to
|
|
18
|
+
= laz_rec[:authz_path]
|
|
19
|
+
although authorization isn't required - something is probably wrong.
|
|
20
|
+
- else
|
|
21
|
+
You were denied authorization
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
class LogicalAuthzModelsGenerator < LogicalAuthz::Generator
|
|
2
|
+
default_options(:permission_class => "Permission",
|
|
3
|
+
:group_class => "Group",
|
|
4
|
+
:admin_group => "Administration")
|
|
5
|
+
|
|
6
|
+
def manifest
|
|
7
|
+
raise "User class name (--user) is required!" unless options[:user_class]
|
|
8
|
+
|
|
9
|
+
record do |manifest|
|
|
10
|
+
#Yeah, I know, and I'm sorry. It should be okay, though.
|
|
11
|
+
ActiveRecord::Base.timestamped_migrations = false
|
|
12
|
+
manifest.class_collisions options[:group_class], options[:permission_class]
|
|
13
|
+
manifest.template "app/models/group.rb.erb", "app/models/#{template_data[:group_field]}.rb", :assigns => template_data
|
|
14
|
+
manifest.template "app/models/permission.rb.erb", "app/models/#{template_data[:permission_field]}.rb", :assigns => template_data
|
|
15
|
+
manifest.template "config/initializers/logical_authz.rb.erb", "config/initializers/logical_authz.rb", :assigns => template_data
|
|
16
|
+
manifest.template "db/seeds_logical_authz.rb.erb", "db/seeds_logical_authz.rb", :assigns => template_data
|
|
17
|
+
manifest.migration_template "migrations/create_groups.rb.erb", "db/migrate", :migration_file_name => "create_#{template_data[:group_table]}", :assigns => template_data
|
|
18
|
+
manifest.migration_template "migrations/create_permissions.rb.erb", "db/migrate", :migration_file_name => "create_#{template_data[:permission_table]}", :assigns => template_data
|
|
19
|
+
manifest.migration_template "migrations/create_users_groups.rb.erb", "db/migrate", :migration_file_name => "create_#{template_data[:user_table]}_#{template_data[:group_table]}", :assigns => template_data
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
class LogicalAuthzRoutesGenerator < LogicalAuthz::Generator
|
|
2
|
+
def manifest
|
|
3
|
+
record do |manifest|
|
|
4
|
+
manifest.named_route :group_user, '/group_user', :controller => 'groups_users', :action => 'create', :conditions => { :method => :post }
|
|
5
|
+
manifest.named_route :ungroup_user, '/ungroup_user', :controller => 'groups_users', :action => 'destroy', :conditions => { :method => :delete }
|
|
6
|
+
manifest.named_route :permit_page, '/permit', :controller => 'permissions', :action => 'create', :conditions => { :method => :post }
|
|
7
|
+
manifest.named_route :forbid_page, '/forbid', :controller => 'permissions', :action => 'destroy', :conditions => { :method => :delete }
|
|
8
|
+
manifest.route_resources :groups
|
|
9
|
+
manifest.named_route :default_unauthorized, '/', :controller => "home", :action => "index"
|
|
10
|
+
end
|
|
11
|
+
end
|
|
12
|
+
end
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
class LogicalAuthzSpecsGenerator < LogicalAuthz::Generator
|
|
2
|
+
default_options(:permission_class => "Permission",
|
|
3
|
+
:group_class => "Group",
|
|
4
|
+
:admin_group => "Administration")
|
|
5
|
+
|
|
6
|
+
def manifest
|
|
7
|
+
record do |manifest|
|
|
8
|
+
manifest.directory "spec/factories"
|
|
9
|
+
manifest.directory "spec/support"
|
|
10
|
+
manifest.directory "spec/controllers"
|
|
11
|
+
manifest.directory "spec/helpers"
|
|
12
|
+
|
|
13
|
+
manifest.with_options :assigns => template_data do |templ|
|
|
14
|
+
templ.template "spec/factories/az_accounts.rb.erb", "spec/factories/logical_authz_#{template_data[:user_table]}.rb"
|
|
15
|
+
templ.template "spec/factories/az_groups.rb.erb", "spec/factories/logical_authz_#{template_data[:group_table]}.rb"
|
|
16
|
+
templ.template "spec/factories/permissions.rb.erb", "spec/factories/logical_authz_#{template_data[:permission_table]}.rb"
|
|
17
|
+
templ.template "spec/support/logical_authz.rb.erb", "spec/support/logical_authz.rb"
|
|
18
|
+
templ.template "spec/support/mock_auth.rb.erb", "spec/support/mock_auth.rb"
|
|
19
|
+
templ.template "spec/controllers/permissions_controller_spec.rb.erb", "spec/controllers/permissions_controller_spec.rb"
|
|
20
|
+
templ.template "spec/controllers/groups_controller_spec.rb.erb", "spec/controllers/groups_controller_spec.rb"
|
|
21
|
+
templ.template "spec/controllers/groups_users_controller_spec.rb.erb", "spec/controllers/groups_users_controller_spec.rb"
|
|
22
|
+
templ.template "spec/helpers/logical_authz_helper_spec.rb.erb", "spec/helpers/logical_authz_helper_spec.rb"
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|