Today I was writing an authentication filter to my controllers that 
needed some parameters. That is what I did:
def self.verify_permission(permission, options={})
   before_filter {|controller| controller.verify_permission(permission, 
options)}
end
def verify_permission(permission, options)
   # actual authentication code goes here
end
And check the permissions with, say:
verify_permission :manage_simulation, :simulation => 1 #just ficticious
Is it possible to do it with Rails directly with some syntax like the below?
before_filter :verify_permission, :parameters => [:manage_simulation, 
{:simulation => 1}], :except => [:login]
If not, it is not complicated to implement, so is there any reasons why 
this would be a bad idea?
Thanks in advance,
Rodrigo.
I assume you''re looking for a good way to implement authorization rules, in which case you might want to take a look at the following plugin: http://github.com/Fingertips/authorization-san And checkout this rails template for more examples on how to use it: http://github.com/Fingertips/rails-template HTH, Eloy On Nov 2, 2009, at 2:19 PM, Rodrigo Rosenfeld Rosas wrote:> > Today I was writing an authentication filter to my controllers that > needed some parameters. That is what I did: > > def self.verify_permission(permission, options={}) > before_filter {|controller| controller.verify_permission(permission, > options)} > end > def verify_permission(permission, options) > # actual authentication code goes here > end > > And check the permissions with, say: > > verify_permission :manage_simulation, :simulation => 1 #just > ficticious > > Is it possible to do it with Rails directly with some syntax like > the below? > > before_filter :verify_permission, :parameters => [:manage_simulation, > {:simulation => 1}], :except => [:login] > > If not, it is not complicated to implement, so is there any reasons > why > this would be a bad idea? > > Thanks in advance, > > Rodrigo. > > > >
Hi Eloy, thank you for your suggestion, but I don''t think it would satisfy my needs... In my case, a user has a role that can be attached to some conditions. For instance, the user ''manager'' has a role ''institution_admin'' only for institution ''manager_institution''... But anyway, that was just an example. I was really curious about filters supporting parameters directly. Best regards, Rodrigo. Em 02-11-2009 14:06, Eloy Duran escreveu:> I assume you''re looking for a good way to implement authorization > rules, in which case you might want to take a look at the following > plugin: http://github.com/Fingertips/authorization-san > And checkout this rails template for more examples on how to use it: http://github.com/Fingertips/rails-template > > HTH, > Eloy > > On Nov 2, 2009, at 2:19 PM, Rodrigo Rosenfeld Rosas wrote: > > >> Today I was writing an authentication filter to my controllers that >> needed some parameters. That is what I did: >> >> def self.verify_permission(permission, options={}) >> before_filter {|controller| controller.verify_permission(permission, >> options)} >> end >> def verify_permission(permission, options) >> # actual authentication code goes here >> end >> >> And check the permissions with, say: >> >> verify_permission :manage_simulation, :simulation => 1 #just >> ficticious >> >> Is it possible to do it with Rails directly with some syntax like >> the below? >> >> before_filter :verify_permission, :parameters => [:manage_simulation, >> {:simulation => 1}], :except => [:login] >> >> If not, it is not complicated to implement, so is there any reasons >> why >> this would be a bad idea? >> >> Thanks in advance, >> >> Rodrigo. >>
Hey Rodrigo,> Hi Eloy, thank you for your suggestion, but I don''t think it would > satisfy my needs... > > In my case, a user has a role that can be attached to some conditions. > For instance, the user ''manager'' has a role ''institution_admin'' only > for > institution ''manager_institution''...I don''t completely follow the explanation of the example, but that would probably be easy with authorization-san. It already supports the idea of ''role'' on an object. In all the projects we have used it, we haven''t found one scenario that we couldn''t solve. class InstitutionsController < ActionController::Base allow_access :institution_admin do # perform any checks and return truthy or falsy value end end> But anyway, that was just an example. I was really curious about > filters > supporting parameters directly.I''m not sure there is any reason to, since like I said we have been able to solve all situations we''ve come across. Besides that, I''m not sure that I find the examples you gave of how it would look like to be readable/understandable. Maybe it''s the example, maybe it''s me… Cheers, Eloy
Rodrigo Rosenfeld Rosas
2009-Nov-03  10:16 UTC
[off-topic] Re: Re: Controller filter parameters
Em 02-11-2009 15:05, Eloy Duran escreveu:> Hey Rodrigo, > > >> Hi Eloy, thank you for your suggestion, but I don''t think it would >> satisfy my needs... >> >> In my case, a user has a role that can be attached to some conditions. >> For instance, the user ''manager'' has a role ''institution_admin'' only >> for >> institution ''manager_institution''... >> > > I don''t completely follow the explanation of the example, but that > would probably be easy with authorization-san. It already supports the > idea of ''role'' on an object. > In all the projects we have used it, we haven''t found one scenario > that we couldn''t solve. > > class InstitutionsController< ActionController::Base > allow_access :institution_admin do > # perform any checks and return truthy or falsy value > end > end >I still can''t figure out how would be the complete use case with authorization-san. Let me put the examples in more detail. In my project, users have roles, which have permissions, as usual. But some roles are attached to some condition. In a role ''institution_admin'', a user should be attached to some specific existent institution. But if a user belongs to ''system_admin'' role, for instance, it shouldn''t be attached to any conditions. I have in User: has_many :roles, :through => :assignments And in Assignment, there is ''user_id'', ''role_id'' and an integer ''condition'' that could be null. The roles are fixed and I check that condition is filled in correctly depending on the role. There is a hash that maps the expected condition class to each role. If you think I could do the same with authorization-san, I would be glad to see a more in-depth example. Thank you, Rodrigo.
Hi Rodrigo,
Here is an example of what you probably want:
  class User
    has_many :roles
    def institution_admin?
      roles.any? { |r| r.label == ''institution_admin'' }
    end
    def system_admin?
      roles.any? { |r| r.label == ''system_admin'' }
    end
  end
  class InstitutionController < ApplicationController
    allow_accesss(:system_admin)
    allow_accesss(:institution_admin) do
      @authenticated.institution == @institution
    end
    prepend_before_filter :find_institution
    private
    def find_institution
      @institution = Institution.find(params[:id])
    end
  end
Can you restart this discussion on the Rails Talk list and CC Eloy and
me? This list is meant for discussing Rails core development.
Thanks,
 Manfred
On Nov 3, 11:16 am, Rodrigo Rosenfeld Rosas <rr.ro...@gmail.com>
wrote:> Em 02-11-2009 15:05, Eloy Duran escreveu:
>
>
>
> > Hey Rodrigo,
>
> >> Hi Eloy, thank you for your suggestion, but I don''t think
it would
> >> satisfy my needs...
>
> >> In my case, a user has a role that can be attached to some
conditions.
> >> For instance, the user ''manager'' has a role
''institution_admin'' only
> >> for
> >> institution ''manager_institution''...
>
> > I don''t completely follow the explanation of the example, but
that
> > would probably be easy with authorization-san. It already supports the
> > idea of ''role'' on an object.
> > In all the projects we have used it, we haven''t found one
scenario
> > that we couldn''t solve.
>
> > class InstitutionsController<  ActionController::Base
> >     allow_access :institution_admin do
> >       # perform any checks and return truthy or falsy value
> >     end
> > end
>
> I still can''t figure out how would be the complete use case with
> authorization-san.
>
> Let me put the examples in more detail. In my project, users have roles,
> which have permissions, as usual.
>
> But some roles are attached to some condition. In a role
> ''institution_admin'', a user should be attached to some
specific existent
> institution.
>
> But if a user belongs to ''system_admin'' role, for
instance, it shouldn''t
> be attached to any conditions.
>
> I have in User:
>
> has_many :roles, :through => :assignments
>
> And in Assignment, there is ''user_id'',
''role_id'' and an integer
> ''condition'' that could be null. The roles are fixed and I
check that
> condition is filled in correctly depending on the role.
>
> There is a hash that maps the expected condition class to each role.
>
> If you think I could do the same with authorization-san, I would be glad
> to see a more in-depth example.
>
> Thank you,
>
> Rodrigo.
Hi Rodrigo,
The boolean accessors on the User model could probably be refactored,  
but you get the idea.
   class User < ActiveRecord::Base
     has_many :roles
     def institution_admin?
       roles.any? { |r| r.label == ''institution_admin'' }
     end
     def system_admin?
       roles.any? { |r| r.label == ''system_admin'' }
     end
   end
   class InstitutionController
     allow_accesss(:system_admin)
     allow_accesss(:institution_admin) do
       @authenticated.institution == @institution
     end
     prepend_before_filter :find_institution
     private
     def find_institution
       @institution = Institution.find(params[:id])
     end
   end
Can we continue this discussion on Ruby on Rails: Talk? This list is  
meant for discussions about Ruby on Rails core development.
Manfred
Hi Rodrigo,
The boolean accessors on the User model could probably be refactored,  
but you get the idea.
class User < ActiveRecord::Base
   has_many :roles
   def institution_admin?
     roles.any? { |r| r.label == ''institution_admin'' }
   end
   def system_admin?
     roles.any? { |r| r.label == ''system_admin'' }
   end
end
class InstitutionController
   allow_accesss(:system_admin)
   allow_accesss(:institution_admin) do
     @authenticated.institution == @institution
   end
   prepend_before_filter :find_institution
   private
   def find_institution
     @institution = Institution.find(params[:id])
   end
end
Can we continue this discussion on Ruby on Rails: Talk? This list is  
meant for discussions about Ruby on Rails core development.
Manfred
Sent from my colleagues'' Mac pro.
On Nov 3, 2009, at 11:16 AM, Rodrigo Rosenfeld Rosas wrote:
>
> Em 02-11-2009 15:05, Eloy Duran escreveu:
>> Hey Rodrigo,
>>
>>
>>> Hi Eloy, thank you for your suggestion, but I don''t think
it would
>>> satisfy my needs...
>>>
>>> In my case, a user has a role that can be attached to some  
>>> conditions.
>>> For instance, the user ''manager'' has a role
''institution_admin'' only
>>> for
>>> institution ''manager_institution''...
>>>
>>
>> I don''t completely follow the explanation of the example, but
that
>> would probably be easy with authorization-san. It already supports  
>> the
>> idea of ''role'' on an object.
>> In all the projects we have used it, we haven''t found one
scenario
>> that we couldn''t solve.
>>
>> class InstitutionsController<  ActionController::Base
>>    allow_access :institution_admin do
>>      # perform any checks and return truthy or falsy value
>>    end
>> end
>>
> I still can''t figure out how would be the complete use case with
> authorization-san.
>
> Let me put the examples in more detail. In my project, users have  
> roles,
> which have permissions, as usual.
>
> But some roles are attached to some condition. In a role
> ''institution_admin'', a user should be attached to some
specific
> existent
> institution.
>
> But if a user belongs to ''system_admin'' role, for
instance, it
> shouldn''t
> be attached to any conditions.
>
> I have in User:
>
> has_many :roles, :through => :assignments
>
> And in Assignment, there is ''user_id'',
''role_id'' and an integer
> ''condition'' that could be null. The roles are fixed and I
check that
> condition is filled in correctly depending on the role.
>
> There is a hash that maps the expected condition class to each role.
>
> If you think I could do the same with authorization-san, I would be  
> glad
> to see a more in-depth example.
>
> Thank you,
>
> Rodrigo.
>
>
> >