# Limiting Access of Nested Resources

**URL:** <https://www.ruby-forum.com/t/limiting-access-of-nested-resources/149735>\
**Category:** Rails\
**Created:** [September 29, 2008, 6:45am UTC](https://www.ruby-forum.com/t/limiting-access-of-nested-resources/149735 "2008-09-29T06:45:41Z")\
**Posts on this page:** 6\
**Page:** 1

<div class="post-metadata">

**Author:** ![sinkva](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/s/9fc29f/32.png) [@sinkva](https://www.ruby-forum.com/u/sinkva)\
**Post date:** [September 29, 2008, 6:45am UTC](https://www.ruby-forum.com/t/limiting-access-of-nested-resources/149735/1 "2008-09-29T06:45:41Z")

</div>

So I’m using nested routes for a users model that has measurements and  
journals… like this:

map.resources :users do |users|  
users.resources :journals  
users.resources :measurements  
end

This of course builds routes as something like:

/user/:user\_id/journals/:id  
/user/:user\_id/measurements/:id

In the case of this application the logged in user is only going to be  
accessing his or her own resources (journals and measurements). So my  
question is: What is the proper way to accommodate that in routing so  
that /user/:user\_id isn’t necessary and just going to /journals or /  
journals/:id would ensure that I’m going to the the currently logged  
in user’s journals or measurements? And in turn, what would be the  
best way of making sure that users can’t type /journal/:id and see  
another users record once that :user\_id was trimmed off (they should  
only be able to see their own).

Thoughts? I greatly appreciate it.

Thanks.  
Tim K.

---

<div class="post-metadata">

**Author:** ![sinkva](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/s/9fc29f/32.png) [@sinkva](https://www.ruby-forum.com/u/sinkva)\
**Post date:** [September 29, 2008, 7:01am UTC](https://www.ruby-forum.com/t/limiting-access-of-nested-resources/149735/2 "2008-09-29T07:01:30Z")

</div>

I’ve never done this but I’ll give my 2 cents anyway:

1. With nested routes, you are always still looking for the user - you  
fetch it in the Journals controller and that’s where you can evaluate  
it. What you can do is fetch the current\_user unless the current\_user  
is an admin or whatever
2. About the routes I’d like to know that… if you always fetch the  
current\_user it would be possible since you don’t pass the user\_id in  
the URL anymore, but admins and such wouldn’t be able to see another’s  
journal.

Ramon T.

---

<div class="post-metadata">

**Author:** ![sinkva](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/s/9fc29f/32.png) [@sinkva](https://www.ruby-forum.com/u/sinkva)\
**Post date:** [September 29, 2008, 7:33am UTC](https://www.ruby-forum.com/t/limiting-access-of-nested-resources/149735/3 "2008-09-29T07:33:10Z")

</div>

Ramon - Fetching the current\_user in the Journals controller doesn’t  
solve the issue, unless I’m misunderstanding you. The current\_user is  
set to in instance variable called @user so @user.id would be equal  
to :user\_id within the route. When I call @journals I’m using the  
relationship to grab the journals suchas @journals = @user.journal.  
The question is really about the routing not about getting the user\_id  
in question. I’m trying to take advantage of the restful routes such  
as user\_journals\_path and all that but without the need to have /  
users/:user\_id in the url.

Does anyone have any experience in doing something like this?

On Sep 29, 1:00 am, “Ramon Miguel M. Tayag” [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)

---

<div class="post-metadata">

**Author:** ![sinkva](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/s/9fc29f/32.png) [@sinkva](https://www.ruby-forum.com/u/sinkva)\
**Post date:** [September 29, 2008, 8:24am UTC](https://www.ruby-forum.com/t/limiting-access-of-nested-resources/149735/4 "2008-09-29T08:24:44Z")

</div>

On Mon, Sep 29, 2008 at 6:45 AM, Tim K. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) wrote:

> /user/:user\_id/journals/:id  
> only be able to see their own).  
> Two things:

1. A has\_many do not necesseraly mean a nested resource _in your  
interface_. You can simply configure

2. Access control is implemented via AR finders. In this case you’d do

---

<div class="post-metadata">

**Author:** ![sinkva](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/s/9fc29f/32.png) [@sinkva](https://www.ruby-forum.com/u/sinkva)\
**Post date:** [September 29, 2008, 4:16pm UTC](https://www.ruby-forum.com/t/limiting-access-of-nested-resources/149735/5 "2008-09-29T16:16:13Z")

</div>

I see Xavior - that’s makes a lot of sense especially with that  
before\_filter. I’ll refactor a little bit. Thanks.

---

<div class="post-metadata">

**Author:** ![sinkva](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/s/9fc29f/32.png) [@sinkva](https://www.ruby-forum.com/u/sinkva)\
**Post date:** [September 29, 2008, 7:42am UTC](https://www.ruby-forum.com/t/limiting-access-of-nested-resources/149735/6 "2008-09-29T07:42:33Z")

</div>

Another thought I had would be just being able to replace the /  
users/:user\_id with /profile

then there could be /profile/journals/2 or whatever… but profile  
would be somehow mapped to the users controller passing the @user as  
it’s default id… am I heading in any form of a sane direction?
