# Acl\_system

**URL:** <https://www.ruby-forum.com/t/acl-system/109484>\
**Category:** Rails\
**Created:** [July 15, 2007, 5:45pm UTC](https://www.ruby-forum.com/t/acl-system/109484 "2007-07-15T17:45:52Z")\
**Posts on this page:** 7\
**Page:** 1

<div class="post-metadata">

**Author:** ![sandman](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/s/ebca7d/32.png) [@sandman](https://www.ruby-forum.com/u/sandman)\
**Post date:** [July 15, 2007, 5:45pm UTC](https://www.ruby-forum.com/t/acl-system/109484/1 "2007-07-15T17:45:52Z")

</div>

Hi all,  
I’m using Ezra’s acl\_system plugin for authorization over the  
acts\_as\_authenticated plugin(for authentication). I really haven’t  
figured out how to use acl\_system. My requirement is simple - I have 3  
roles - admin, buyer and store. I am not able to figure out to assign  
roles to users.  
May I add that I did follow all instuctions on the project homepage -  
created a “Role” model and the habtm join table etc.  
I’m new to rails and sure this is due to my lack of understanding of the  
code.  
Any help will be really appreciated.  
Regards,  
Sandman

---

<div class="post-metadata">

**Author:** ![sandman](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/s/ebca7d/32.png) [@sandman](https://www.ruby-forum.com/u/sandman)\
**Post date:** [November 7, 2007, 12:24pm UTC](https://www.ruby-forum.com/t/acl-system/109484/2 "2007-11-07T12:24:45Z")

</div>

Hola, he estado mirando mas esto de los plugins y no estoy seguro de si  
lo  
estoy instalando bien:

lo que hago es esto dentro de mi App:  
script/plugin install  
[http://opensvn.csie.org/ezra/rails/plugins/dev/acl\_system2/](http://opensvn.csie.org/ezra/rails/plugins/dev/acl_system2/)

y esto me genera una carpeta dentro de VENDOR/PLUGINS con el nombre del  
plugin. Â¿Hay que hacer algo mas para ponerlo a foncionar?

He seguido los pasos en este tuto del autor:

[1] [Ruby on Rails Blog / What is Ruby on Rails for?](http://brainspl.at/articles/2006/02/20/new-plugin-acl_system)  
y me da como resultado este error:

> > > > > undefined method `access_control' for PostsController:Class El metodo `access\_control’ es uno de los metodos que incluye el plugin,  
> > > > > esto me hace pensar que no lo he “activado” o algo asi

Â¿Hay que hacer algo con el archivo “init.rb”?

despues de descargar el plugin [1] hay que poner algo por linea de  
comandos  
(script/generate…)?

No sÃ©, llevo un buen rato y no veo por donde van los tiros

gracias por vuestra ayuda

---

<div class="post-metadata">

**Author:** ![sandman](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/s/ebca7d/32.png) [@sandman](https://www.ruby-forum.com/u/sandman)\
**Post date:** [November 7, 2007, 12:29pm UTC](https://www.ruby-forum.com/t/acl-system/109484/3 "2007-11-07T12:29:26Z")

</div>

On 11/6/07, Andrés gutiérrez [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) wrote:

> Hola, he estado mirando mas esto de los plugins y no estoy seguro de si lo  
> estoy instalando bien:

No conozco el plugin, pero reiniciaste el servidor luego de instalar el  
plugin?

---

<div class="post-metadata">

**Author:** ![sandman](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/s/ebca7d/32.png) [@sandman](https://www.ruby-forum.com/u/sandman)\
**Post date:** [November 7, 2007, 12:30pm UTC](https://www.ruby-forum.com/t/acl-system/109484/4 "2007-11-07T12:30:37Z")

</div>

No, lo voy a hacer

Gracias

El dÃ­a 6/11/07, Damian J. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) escribiÃ³:

---

<div class="post-metadata">

**Author:** ![sandman](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/s/ebca7d/32.png) [@sandman](https://www.ruby-forum.com/u/sandman)\
**Post date:** [November 7, 2007, 12:32pm UTC](https://www.ruby-forum.com/t/acl-system/109484/5 "2007-11-07T12:32:23Z")

</div>

vale, por hoy vale, pero lo de reiniciar el server ha funcionado, maÃ±ana  
seguire experimentando a partir de aqui.

Gracias Damian. Esta tarde me has ayudado mucho, y eso que no conoces el  
plugin, si lo llegas a conocer…  
Un saludo

El dÃ­a 6/11/07, AndrÃ©s gutiÃ©rrez [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) escribiÃ³:

---

<div class="post-metadata">

**Author:** ![sandman](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/s/ebca7d/32.png) [@sandman](https://www.ruby-forum.com/u/sandman)\
**Post date:** [November 7, 2007, 12:40pm UTC](https://www.ruby-forum.com/t/acl-system/109484/6 "2007-11-07T12:40:01Z")

</div>

Estos son mis apuntes, espero que te sirvan:

==========================================================  
Plugin acl\_system2  
Instalación  
ruby script/plugin install  
[http://opensvn.csie.org/ezra/rails/plugins/dev/acl\_system2](http://opensvn.csie.org/ezra/rails/plugins/dev/acl_system2)

Requisitos de funcionamiento

```
*
  El plugin necesita que exista un método current_user que

```

devuelva el usuario actualmente conectado. Esto se cumple si  
utilizamos restful\_authentication.

```
*
  El modelo User debe incluir:

```

has\_and\_belongs\_to\_many :roles

```
*
  El modelo Role debe tener un atributo title:

```

ruby script/generate model role

class Role \< ActiveRecord::Base  
has\_and\_belongs\_to\_many :users  
end

class CreateRoles \< ActiveRecord::Migration  
def self.up  
create\_table :roles, :force =\> true do |t|  
t.column :title, :string  
end  
end  
def self.down  
drop\_table :roles  
end  
end

Y claro, no hay que olvidarse de la table roles\_users:

class CreateRolesUsers \< ActiveRecord::Migration  
def self.up  
create\_table :roles\_users, :id =\> false, :force =\> true do |t|  
t.column :role\_id, :integer  
t.column :user\_id, :integer  
end  
end  
def self.down  
drop\_table :roles  
end  
end

Carga inicial de roles

class LoadRoles \< ActiveRecord::Migration  
def self.up  
down  
roles = %w{admin}  
roles.each do |role\_title|  
role = Role.create(:title =\> role\_title)  
role.save!  
end  
end  
def self.down  
Role.delete(:all)  
end  
end

Asignación manual del role admin

$ ruby script/console  
Loading development environment.

> > user = User.find(1)  
> > role = Role.find(1)  
> > user.roles \<\< role

Control de acceso en el controller

access\_control [:index] =\> ‘admin’

Control en la vista

\<% restrict\_to ‘admin’ do %\>  
\<%= link\_to ‘foo’, :action =\>‘foo’ %\>  
\<% end %\>

En applicaction.rb (o en los controladores que se quiera) hay que tener:

include AuthenticatedSystem

==========================================================

---

<div class="post-metadata">

**Author:** ![sandman](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/s/ebca7d/32.png) [@sandman](https://www.ruby-forum.com/u/sandman)\
**Post date:** [November 7, 2007, 1:03pm UTC](https://www.ruby-forum.com/t/acl-system/109484/7 "2007-11-07T13:03:27Z")

</div>

Vale, mas o menos me funciona. He usado el ejemplo del Blog que el autor  
recomienda. Esto es lo que he puesto  
en Posts\_controller.rb:

before\_filter :login\_required, :except =\> [:list, :index]

access\_control :new =\> ‘(admin | moderator)’,  
:create =\> ‘(admin | moderator)’,  
:edit =\> ‘(admin | moderator)’,  
:update =\> ‘(admin | moderator)’,  
:destroy =\> ‘admin & !moderator’

Lo Ãºnico que queda por determinar en esta lista de privilegios es “show”  
que  
se consigue cuando estas registrado mediante [Acts as Authenticated] en  
mi caso. Hasta aquÃ­ todo claro.

Lo que me falla es en las vistas cuando pongo esto:

\<% restrict\_to ‘admin’ do %\>  
\<%= link\_to ‘foo’, :action =\>‘foo’ %\>  
\<% end %\>

Me falla cuando no estoy registrado y me dice esto:

undefined method `roles’ for :false:Symbol

Es porque no tengo un current\_user asignado, pero este error me da  
cuando  
pulso en un link que me lleva a la secciÃ³n del blog dentro de mi  
App. Esto sin poner esto en la vista list.rhml no me pasa y cualquiera  
puede  
ver los posts publicados. Â¿No deberÃ­a fallar cuando se pulsa sobre el  
link  
en cuestion?  
Bueno, no se si me he explicado…

Una segunda duda que tengo es como hago para que en los menus me  
aparezcan  
determinados links (p.e. “editar privilegios de usuarios”)  
Si el usuario que esta registrado Tiene el role de admin, sino esta  
opcion  
no se muestra. Â¿alguna idea?
