Skip to content

Commit

Permalink
add support for 'current_user'
Browse files Browse the repository at this point in the history
  • Loading branch information
kpassapk committed Oct 8, 2013
1 parent 4b474ef commit beb9057
Show file tree
Hide file tree
Showing 2 changed files with 42 additions and 2 deletions.
31 changes: 31 additions & 0 deletions README.md
Expand Up @@ -99,6 +99,37 @@ namespace 'foo', :serializer => :bar do
end
```

### current_user

One of the nice features of ActiveModel::Serializers is that it
provides access to the authorization context via the `current_user`.

In Grape, you can get the same behavior by defining a `current_user`
helper method:

```ruby
helpers do
def current_user
@current_user ||= User.where( :access_token => params[:token]).first
end

def authenticate!
error!('401 Unauthenticated', 401) unless current_user
end
end
```

Then, in your serializer, you could show or hide some elements
based on the current user's permissions:

```ruby
class PostSerializer < ActiveModel::Serializer
...
def include_admin_comments?
current_user.roles.member? :admin
end
end
```

### Full Example

Expand Down
13 changes: 11 additions & 2 deletions lib/grape-active_model_serializers/endpoint_extension.rb
Expand Up @@ -16,9 +16,18 @@ def route_options
options[:route_options]
end

def self.included(base)
mattr_accessor :_serialization_scope
self._serialization_scope = :current_user

base.class_eval do
def serialization_scope
send(_serialization_scope) if _serialization_scope && respond_to?(_serialization_scope, true)
end
end
end

def default_serializer_options; end
def serialization_scope; end
def _serialization_scope; end
def url_options; end
end

Expand Down

0 comments on commit beb9057

Please sign in to comment.