Dúvida Restful Authentication

41 views
Skip to first unread message

brunosps

unread,
Nov 23, 2010, 6:09:33 AM11/23/10
to rails-br
Caros colegas,

Estou usando o plugin restful authentication com rails 3.
Nos controller e views consigo recuperar o usuário logado
com o metódo "current_user".
Mas nos models isso não funciona, precisava dessa informação no model
pois gostaria de criar um scope por usuário, exemplo:

class Contato < ActiveRecord:Base
default_scope where(:user => current_user)
end

Alguém sabe uma maneira de disponibilizar o usuário atual nos models,
sem ser com váriaveis publicas ?

Grato
Bruno Santos

Allam Marcos Campanini Matsubara

unread,
Nov 23, 2010, 12:25:04 PM11/23/10
to rail...@googlegroups.com
Posso estar enganado, mas o default_scope não serve para definir um comportamento das intâncias da classe? Não entendi muito qual é o seu objetivo criando um default_scope para um usuário definido.

Além disso o model não tem acesso ao current_user pr que isso "não é da conta dele", ou seja, ele não deve saber que é o usuário, já que a parte dele se destina a atender requisições que necessitem de informações da base de dados.

2010/11/23 brunosps <bruno...@gmail.com>

--
Você está recebendo esta mensagem porque se inscreveu no grupo "rails-br" dos Grupos do Google.
Para postar neste grupo, envie um e-mail para rail...@googlegroups.com.
Para cancelar a inscrição nesse grupo, envie um e-mail para rails-br+u...@googlegroups.com.
Para obter mais opções, visite esse grupo em http://groups.google.com/group/rails-br?hl=pt-BR.




--
Allam Marcos Campanini Matsubara

skype: allam.matsubara
twitter: @allam_matsubara
Phone: (41) 8847-8677


Luiz Claudio Garcia

unread,
Nov 23, 2010, 12:29:26 PM11/23/10
to rail...@googlegroups.com
http://www.zorched.net/2007/05/29/making-session-data-available-to-models-in-ruby-on-rails/
http://www.prateekdayal.net/2007/10/25/rails-accessing-session-data-in-models/

[]s

Luiz

2010/11/23 brunosps <bruno...@gmail.com>:

> --
> Você está recebendo esta mensagem porque se inscreveu no grupo "rails-br" dos Grupos do Google.
> Para postar neste grupo, envie um e-mail para rail...@googlegroups.com.
> Para cancelar a inscrição nesse grupo, envie um e-mail para rails-br+u...@googlegroups.com.
> Para obter mais opções, visite esse grupo em http://groups.google.com/group/rails-br?hl=pt-BR.
>
>

--
====================
---------
Luiz Cláudio Garcia - @LuizzzGarcia
TRE-RS

Luiz Claudio Garcia

unread,
Nov 23, 2010, 12:37:25 PM11/23/10
to rail...@googlegroups.com
Bruno,

Apenas complementando.. concordo com o que o Allan disse. Não é a toa
que você nao tem acesso aos dados de session nos seus models. Ele nao
foram feitos para isso.
Eu faria um named_scope passando um parametro.. Algo tipo

named_scope :my_articles, lambda { |my_id|
{ :conditions => ["author_id = ?", my_id] }
}

@current_author_articles = Article.my_articles(current_user.id)

Os links que te mandei antes até resolvem o problema.. Mas podem te
criar mais problemas no futuro..

[]s

Luiz

2010/11/23 Luiz Claudio Garcia <lui...@gmail.com>:

brunosps

unread,
Nov 23, 2010, 3:13:37 PM11/23/10
to rails-br
Então senhores,

A ideia é a seguinte filtrar os registros por usuários, exemplo o
usuário "BRUNO" só pode ver os contatos dele ...
E várias outras informações que somente o usuário que cadastrou
poderia ver ...
Por isso pensei em alterar o comportamento do model para considerar o
filtro pelo usuário um padrão, ou seja,
sempre que executar Contato.all esse resultado estaria filtrado de
acordo com o usuário logado...

Bom eu pensei em fazer isso ... agora se há outro jeito mais simples
por favor me digam ...

[]

On Nov 23, 3:37 pm, Luiz Claudio Garcia <lui...@gmail.com> wrote:
> Bruno,
>
> Apenas complementando.. concordo com o que o Allan disse. Não é a toa
> que você nao tem acesso aos dados de session nos seus models. Ele nao
> foram feitos para isso.
> Eu faria um named_scope passando um parametro.. Algo tipo
>
> named_scope :my_articles, lambda { |my_id|
>  { :conditions => ["author_id = ?", my_id] }
>
> }
>
> @current_author_articles = Article.my_articles(current_user.id)
>
> Os links que te mandei antes até resolvem o problema.. Mas podem te
> criar mais problemas no futuro..
>
> []s
>
> Luiz
>
> 2010/11/23 Luiz Claudio Garcia <lui...@gmail.com>:
>
>
>
>
>
>
>
>
>
> >http://www.zorched.net/2007/05/29/making-session-data-available-to-mo...
> >http://www.prateekdayal.net/2007/10/25/rails-accessing-session-data-i...
>
> > []s
>
> > Luiz
>
> > 2010/11/23 brunosps <brunosp...@gmail.com>:
> >> Caros colegas,
>
> >> Estou usando o plugin restful authentication com rails 3.
> >> Nos controller e views consigo recuperar o usuário logado
> >> com o metódo "current_user".
> >> Mas nos models isso não funciona, precisava dessa informação no model
> >> pois gostaria de criar um scope por usuário, exemplo:
>
> >> class Contato < ActiveRecord:Base
> >>        default_scope where(:user => current_user)
> >> end
>
> >> Alguém sabe uma maneira de disponibilizar o usuário atual nos models,
> >> sem ser com váriaveis publicas ?
>
> >> Grato
> >> Bruno Santos
>
> >> --
> >> Você está recebendo esta mensagem porque se inscreveu no grupo "rails-br" dos Grupos do Google.
> >> Para postar neste grupo, envie um e-mail para rail...@googlegroups.com.
> >> Para cancelar a inscrição nesse grupo, envie um e-mail para rails-br+u...@googlegroups.com.
> >> Para obter mais opções, visite esse grupo emhttp://groups.google.com/group/rails-br?hl=pt-BR.

brunosps

unread,
Nov 24, 2010, 7:22:29 AM11/24/10
to rails-br
Senhores consegui solucionar o problema de uma forma até que
elegante ... hehe
Estou usando inherited_resources para deixar meus controllers magros,
junto com o will_paginate ...
é proposto a criação do seguinte metódo protected para que a paginação
seja feita ...

class ContatosController < InheritedResources:Base
respond_to :html, :xml

protected

def collection

@contatos ||= end_of_association_chain.paginate

end

end

Como isso se repete em todos os controller da aplicação, criei um
module com esse método para inclui-lo em todos os controllers ...

module CollectionPaginate
def collection
set_collection_ivar(end_of_association_chain.paginate)
end
end

Com isso o controller Contatos fica da seguinte forma:

class ContatosController < InheritedResources:Base
respond_to :html, :xml
include CollectionPaginate
end

Beleza feito isso é preciso implementar o filtro no objeto
end_of_association_chain que fica dessa forma:
module CollectionPaginate
def collection
set_collection_ivar(end_of_association_chain.where(:user_id =>
current_user.id).paginate)
end
end

Pronto agora tenho o filtro por usuário para todos os controllers que
estiverem com o include ....

Obrigado pela ajuda ...

[]'s

Allam Marcos Campanini Matsubara

unread,
Nov 24, 2010, 7:38:04 AM11/24/10
to rail...@googlegroups.com
Beleza Bruno, legal sua solução e obrigado por compartilhar conosco. Tomara que ajude mais pessoas com esse tipo de problema!

2010/11/24 brunosps <bruno...@gmail.com>
Para obter mais opções, visite esse grupo em http://groups.google.com/group/rails-br?hl=pt-BR.

brunosps

unread,
Nov 24, 2010, 7:38:53 AM11/24/10
to rails-br
Senhores consegui solucionar o problema de uma forma até que
elegante ... hehe
Estou usando inherited_resources para deixar meus controllers magros,
junto com o will_paginate ...
é proposto a criação do seguinte metódo protected para que a
paginação
seja feita ...

<script src='http://pastie.org/1322672.js'></script>

Como isso se repete em todos os controller da aplicação, criei um
module com esse método para inclui-lo em todos os controllers ...

<script src='http://pastie.org/1322700.js'></script>

Com isso o controller Contatos fica da seguinte forma:

<script src='http://pastie.org/1322702.js'></script>

Beleza feito isso é preciso implementar o filtro no objeto
end_of_association_chain que fica dessa forma:

<script src='http://pastie.org/1322707.js'></script>

Pronto agora tenho o filtro por usuário para todos os controllers que
estiverem com o include ....
Obrigado pela ajuda ...
[]'s

brunosps

unread,
Nov 24, 2010, 7:42:20 AM11/24/10
to rails-br
Poxa não sei postar com o código no pastie ...
#fail
Reply all
Reply to author
Forward
0 new messages