tuersteher 0.4.0 → 0.4.1

Sign up to get free protection for your applications and to get access to all the features.
data/.gitignore CHANGED
@@ -1,3 +1,4 @@
1
1
  pkg
2
2
  .idea
3
3
  tuersteher*.gem
4
+ nbproject
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.4.0
1
+ 0.4.1
data/lib/tuersteher.rb CHANGED
@@ -61,7 +61,7 @@ module Tuersteher
61
61
  def eval_rules rules_definitions
62
62
  @path_rules = []
63
63
  @model_rules = []
64
- eval rules_definitions
64
+ eval rules_definitions, binding, (@rules_config_file||'no file')
65
65
  @was_read = true
66
66
  Tuersteher::TLogger.logger.info "Tuersteher::AccessRulesStorage: #{@path_rules.size} path-rules and #{@model_rules.size} model-rules"
67
67
  end
@@ -274,7 +274,8 @@ module Tuersteher
274
274
  # bind current_user on the current thread
275
275
  Thread.current[:user] = current_user
276
276
 
277
- req_method = request.method.downcase.to_sym
277
+ req_method = request.method
278
+ req_method = req_method.downcase.to_sym if req_method.is_a?(String)
278
279
  url_path = request.send(@@url_path_method)
279
280
  unless path_access?(url_path, req_method)
280
281
  usr_id = current_user && current_user.respond_to?(:id) ? current_user.id : current_user.object_id
@@ -352,6 +353,12 @@ module Tuersteher
352
353
  self
353
354
  end
354
355
 
356
+ # add list of roles
357
+ def roles(*role_names)
358
+ role_names.flatten.each{|role_name| role(role_name)}
359
+ self
360
+ end
361
+
355
362
  # add extension-definition
356
363
  # parmaters:
357
364
  # method_name: Symbol with the name of the method to call for addional check
@@ -18,6 +18,10 @@ path('/').grant.method(:get)
18
18
  path(:all).grant.role(:ADMIN)
19
19
  path('/user/lock').deny.role(:USER).role(:APPROVER)
20
20
  path('/special').grant.extension(:special?, :area1)
21
+ path('/pictures') do
22
+ grant.role(:admin)
23
+ deny.role(:guest)
24
+ end
21
25
 
22
26
  #
23
27
  # Model-Object-Zugriffsregeln
@@ -38,6 +38,10 @@ end
38
38
  @model_rules.should have(4).items
39
39
  end
40
40
 
41
+ specify do
42
+ AccessRules.path_access?(nil, '/')
43
+ end
44
+
41
45
  end # of context "eval_rules"
42
46
 
43
47
  end # of describe AccessRulesStorage
@@ -92,6 +92,7 @@ module Tuersteher
92
92
 
93
93
  before do
94
94
  rules = [
95
+ ModelAccessRule.new(:all).grant.role(:sysadmin),
95
96
  ModelAccessRule.new(SampleModel1).grant.method(:all),
96
97
  ModelAccessRule.new(SampleModel2).grant.method(:read),
97
98
  ModelAccessRule.new(SampleModel2).grant.method(:update).role(:user).extension(:owner?),
@@ -142,6 +143,23 @@ module Tuersteher
142
143
  end
143
144
  end
144
145
 
146
+
147
+ context "User with role :sysadmin" do
148
+ before do
149
+ @user.stub(:has_role?){|role| role==:sysadmin}
150
+ end
151
+
152
+ it "should be true for this" do
153
+ AccessRules.model_access?(@user, "test", :xyz).should be_true
154
+ AccessRules.model_access?(@user, @model1, :xyz).should be_true
155
+ AccessRules.model_access?(@user, @model2, :read).should be_true
156
+ AccessRules.model_access?(@user, @model2, :update).should be_true
157
+ AccessRules.model_access?(@user, @model2, :delete).should be_true
158
+ AccessRules.model_access?(@user, @model2, :create).should be_true
159
+ end
160
+ end
161
+
162
+
145
163
  context "without user" do
146
164
  it "should be true for this models" do
147
165
  AccessRules.model_access?(nil, @model1, :xyz).should be_true
@@ -55,6 +55,23 @@ module Tuersteher
55
55
  @rule.fired?("test", :read, @user).should_not be_true
56
56
  end
57
57
  end
58
+
59
+ context "for :all Model-Instances" do
60
+ before do
61
+ @rule_all = ModelAccessRule.new(:all).grant.role(:admin)
62
+ @user = stub('user')
63
+ end
64
+
65
+ it "should fired for user with role :admin" do
66
+ @user.stub(:has_role?) { |role| role==:admin }
67
+ @rule_all.fired?("test", :xyz, @user).should be_true
68
+ end
69
+
70
+ it "should fired for user with role :admin" do
71
+ @user.stub(:has_role?).and_return(false)
72
+ @rule_all.fired?("test", :xyz, @user).should_not be_true
73
+ end
74
+ end
58
75
  end # of context "grant with roles"
59
76
 
60
77
 
@@ -162,6 +162,25 @@ module Tuersteher
162
162
  @rule.fired?("/admin", :get, @user).should be_true
163
163
  end
164
164
  end # of context "not" do
165
-
165
+
166
+
167
+ context "add multiple roles" do
168
+ before(:all) do
169
+ @rule = PathAccessRule.new('/admin').roles(:admin1, :admin2).roles([:s1, :s2])
170
+ @user = stub('user')
171
+ end
172
+
173
+ it "should fired for user with role which specified in the rule" do
174
+ [:admin1, :admin2, :s1, :s2].each do |role_name|
175
+ @user.stub(:has_role?){|role| role==role_name}
176
+ @rule.fired?("/admin", :get, @user).should be_true
177
+ end
178
+ end
179
+
180
+ it "should not fired for user with role :user" do
181
+ @user.stub(:has_role?){|role| role==:user}
182
+ @rule.fired?("/admin", :get, @user).should_not be_true
183
+ end
184
+ end
166
185
  end
167
186
  end
data/tuersteher.gemspec CHANGED
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{tuersteher}
8
- s.version = "0.4.0"
8
+ s.version = "0.4.1"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Bernd Ledig"]
12
- s.date = %q{2010-09-04}
12
+ s.date = %q{2010-09-19}
13
13
  s.description = %q{Security-Layer for Rails-Application acts like a firewall.}
14
14
  s.email = %q{bernd@ledig.info}
15
15
  s.extra_rdoc_files = [
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: tuersteher
3
3
  version: !ruby/object:Gem::Version
4
- hash: 15
4
+ hash: 13
5
5
  prerelease: false
6
6
  segments:
7
7
  - 0
8
8
  - 4
9
- - 0
10
- version: 0.4.0
9
+ - 1
10
+ version: 0.4.1
11
11
  platform: ruby
12
12
  authors:
13
13
  - Bernd Ledig
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2010-09-04 00:00:00 +02:00
18
+ date: 2010-09-19 00:00:00 +02:00
19
19
  default_executable:
20
20
  dependencies: []
21
21