bsm-sso-client 0.7.4 → 0.7.5

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.
@@ -21,6 +21,7 @@ module Bsm
21
21
  autoload :UrlHelpers, 'bsm/sso/client/url_helpers'
22
22
  autoload :FailureApp, 'bsm/sso/client/failure_app'
23
23
  autoload :Cached, 'bsm/sso/client/cached'
24
+ autoload :Ability, 'bsm/sso/client/ability'
24
25
 
25
26
  mattr_accessor :secret
26
27
  @@secret = nil
@@ -0,0 +1,78 @@
1
+ begin
2
+ require 'cancan/ability'
3
+ rescue LoadError => e
4
+ warn "\n [!] Please install `cancan` Gem to use the Ability module\n"
5
+ raise
6
+ end
7
+
8
+ module Bsm::Sso::Client::Ability
9
+ extend ActiveSupport::Concern
10
+
11
+ included do
12
+ include CanCan::Ability
13
+ end
14
+
15
+ module ClassMethods
16
+
17
+ # @return [Hash] roles, scoped by user type
18
+ def roles
19
+ private_instance_methods(false).inject({}) do |result, name|
20
+ prefix, scope, name = name.to_s.split('__')
21
+ next result unless prefix == "as" && scope && name
22
+
23
+ result[scope.to_sym] ||= []
24
+ result[scope.to_sym] << name
25
+ result
26
+ end
27
+ end
28
+
29
+ # Ability definition helper
30
+ # @param [Symbol] scope the user scope
31
+ # @param [String] name the role name
32
+ def as(scope, name, &block)
33
+ method_name = :"as__#{scope}__#{name}"
34
+
35
+ define_method(method_name) do
36
+ return false if self.scope != scope || applied.include?(name.to_s)
37
+ applied.add(name.to_s)
38
+ instance_eval(&block)
39
+ true
40
+ end
41
+ private method_name
42
+ end
43
+
44
+ end
45
+
46
+ # @attr_reader [User] current user record
47
+ attr_reader :user
48
+
49
+ # Construstor
50
+ # @param [User] current user record
51
+ def initialize(user)
52
+ @user = user
53
+ @user.roles.each do |name|
54
+ same_as(name)
55
+ end
56
+ if @user.level >= 90
57
+ same_as(:administrator)
58
+ end
59
+ end
60
+
61
+ # @return [Symbol] the user scope
62
+ def scope
63
+ @scope ||= (user.respond_to?(:employee?) && user.employee? ? :employee : :client)
64
+ end
65
+
66
+ # @return [Set] applied roles
67
+ def applied
68
+ @applied ||= Set.new
69
+ end
70
+
71
+ # Runs a role method
72
+ # @param [String] name the role name
73
+ def same_as(name)
74
+ method = :"as__#{scope}__#{name}"
75
+ send(method) if respond_to?(method, true)
76
+ end
77
+
78
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bsm-sso-client
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.7.4
4
+ version: 0.7.5
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-08-24 00:00:00.000000000 Z
12
+ date: 2012-08-30 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: railties
@@ -82,7 +82,7 @@ dependencies:
82
82
  requirements:
83
83
  - - ! '>='
84
84
  - !ruby/object:Gem::Version
85
- version: 0.14.0
85
+ version: 0.16.0
86
86
  type: :runtime
87
87
  prerelease: false
88
88
  version_requirements: !ruby/object:Gem::Requirement
@@ -90,7 +90,23 @@ dependencies:
90
90
  requirements:
91
91
  - - ! '>='
92
92
  - !ruby/object:Gem::Version
93
- version: 0.14.0
93
+ version: 0.16.0
94
+ - !ruby/object:Gem::Dependency
95
+ name: cancan
96
+ requirement: !ruby/object:Gem::Requirement
97
+ none: false
98
+ requirements:
99
+ - - ~>
100
+ - !ruby/object:Gem::Version
101
+ version: 1.6.8
102
+ type: :development
103
+ prerelease: false
104
+ version_requirements: !ruby/object:Gem::Requirement
105
+ none: false
106
+ requirements:
107
+ - - ~>
108
+ - !ruby/object:Gem::Version
109
+ version: 1.6.8
94
110
  - !ruby/object:Gem::Dependency
95
111
  name: activerecord
96
112
  requirement: !ruby/object:Gem::Requirement
@@ -215,6 +231,7 @@ files:
215
231
  - lib/bsm/sso/client/strategies/http_auth.rb
216
232
  - lib/bsm/sso/client/cached.rb
217
233
  - lib/bsm/sso/client/failure_app.rb
234
+ - lib/bsm/sso/client/ability.rb
218
235
  - lib/bsm/sso/client/abstract_resource.rb
219
236
  - lib/bsm/sso/client/railtie.rb
220
237
  - lib/bsm/sso/client/user_methods.rb
@@ -250,3 +267,4 @@ signing_key:
250
267
  specification_version: 3
251
268
  summary: BSM's internal SSO client
252
269
  test_files: []
270
+ has_rdoc: