tuersteher 0.1.2 → 0.1.3

Sign up to get free protection for your applications and to get access to all the features.
data/README.rdoc CHANGED
@@ -5,7 +5,7 @@ It's check your URL's or Modells to have the rights for this.
5
5
 
6
6
  == Install
7
7
 
8
- gem install bledig-tuersteher --source http://gems.github.org
8
+ gem install tuersteher
9
9
 
10
10
 
11
11
  == Usage
@@ -35,6 +35,10 @@ Check if your authendicate-system has implemented the methods:
35
35
  * current_user
36
36
  * access_denied
37
37
 
38
+ and the cuurent_user should have a method
39
+
40
+ * has_role(*roles)
41
+
38
42
  If not, just implemen it (see samples/application_controller.rb)
39
43
 
40
44
  == License
data/lib/tuersteher.rb CHANGED
@@ -114,6 +114,25 @@ module Tuersteher
114
114
  @model_rules << ModelAccessRule.new(model_class, access_type, *roles, &block)
115
115
  end
116
116
 
117
+ # definiert Model-basierende Zugriffsregel
118
+ #
119
+ # model_class: Model-Klassenname oder :all fuer alle
120
+ # access_type: Zugriffsart (:create, :update, :destroy, :all o.A. selbst definierte Typen)
121
+ # roles Aufzählung der erforderliche Rolen (:all für ist egal),
122
+ # hier ist auch ein Array von Symbolen möglich
123
+ # block optionaler Block, wird mit model und user aufgerufen und muss true oder false liefern
124
+ # hier ein Beispiel mit Block:
125
+ # <code>
126
+ # # Regel, in der sich jeder User selbst aendern darf
127
+ # grant_model(User, :update, :all){|model,user| model.id==user.id}
128
+ # </code>
129
+ #
130
+ def deny_model model_class, access_type, *roles, &block
131
+ rule = ModelAccessRule.new(model_class, access_type, *roles, &block)
132
+ rule.deny = true
133
+ @model_rules << rule
134
+ end
135
+
117
136
  end
118
137
 
119
138
  class AccessRules
@@ -151,17 +170,18 @@ module Tuersteher
151
170
  raise "Wrong call! Use: model_access(model-instance-or-class, permission)" unless permission.is_a? Symbol
152
171
  return false unless model
153
172
 
154
- access = AccessRulesStorage.instance.model_rules.detect do |rule|
155
- rule.has_access? model, permission, user
173
+ rule = AccessRulesStorage.instance.model_rules.detect do |rule|
174
+ rule.fired? model, permission, user
156
175
  end
176
+ access = rule && !rule.deny
157
177
  if Tuersteher::TLogger.logger.debug?
158
178
  if model.instance_of?(Class)
159
- Tuersteher::TLogger.logger.debug("Tuersteher: model_access?(#{model}, #{permission}) => #{access ? access : 'denied'}")
179
+ Tuersteher::TLogger.logger.debug("Tuersteher: model_access?(#{model}, #{permission}) => #{access || 'denied'} #{rule}")
160
180
  else
161
- Tuersteher::TLogger.logger.debug("Tuersteher: model_access?(#{model.class}(#{model.respond_to?(:id) ? model.id : model.object_id }), #{permission}) => #{access ? access : 'denied'}")
181
+ Tuersteher::TLogger.logger.debug("Tuersteher: model_access?(#{model.class}(#{model.respond_to?(:id) ? model.id : model.object_id }), #{permission}) => #{access || 'denied'} #{rule}")
162
182
  end
163
183
  end
164
- access!=nil
184
+ access
165
185
  end
166
186
  end
167
187
 
@@ -310,7 +330,7 @@ module Tuersteher
310
330
 
311
331
  class ModelAccessRule
312
332
  attr_reader :clazz, :access_type, :role, :block
313
-
333
+ attr_accessor :deny
314
334
 
315
335
  # erzeugt neue Object-Zugriffsregel
316
336
  #
@@ -348,7 +368,7 @@ module Tuersteher
348
368
  # *roles ist dabei eine Array aus Symbolen
349
369
  #
350
370
  #
351
- def has_access? model, perm, user
371
+ def fired? model, perm, user
352
372
  user = nil if user==:false # manche Authenticate-System setzen den user auf :false
353
373
  m_class = model.instance_of?(Class) ? model : model.class
354
374
  if @clazz!=m_class.to_s && @clazz!=:all
@@ -377,7 +397,7 @@ module Tuersteher
377
397
  end
378
398
 
379
399
  def to_s
380
- "ModelAccessRule[#{@clazz}, #{@access_type}, #{@roles.join(' ')}]"
400
+ "ModelAccessRule[#{@clazz}, #{@access_type}, #{@roles.join(' ')}#{@deny ? ' deny' : ''}]"
381
401
  end
382
402
 
383
403
  end
data/tuersteher.gemspec CHANGED
@@ -5,7 +5,7 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{tuersteher}
8
- s.version = "0.1.2"
8
+ s.version = "0.1.3"
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"]
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: 31
4
+ hash: 29
5
5
  prerelease: false
6
6
  segments:
7
7
  - 0
8
8
  - 1
9
- - 2
10
- version: 0.1.2
9
+ - 3
10
+ version: 0.1.3
11
11
  platform: ruby
12
12
  authors:
13
13
  - Bernd Ledig