Saltar al contenido

Rails 4 roles y permisos de usuario

Solución:

Tu primera suposición fue correcta, usa cancancan y estarás bien con eso.

EDITAR 24 de julio de 2015

He estado usando cancancan durante mucho tiempo y siempre funcionó muy bien. Recientemente comencé a trabajar en un proyecto en el que se usa Pundit para la autorización.

Es asombroso. Le pide que defina la política para cada recurso y se siente más natural que una clase de habilidad hinchada.

Para proyectos más grandes, definitivamente recomendaría Pundit.

Para controlar el acceso a las acciones, recomendaría Action Access, se reduce a esto:

class UsersController < ApplicationController
  let :admin, :all
  let :user, [:index, :show]

  # ...
end

Esto bloqueará automáticamente el controlador, lo que permitirá a los administradores acceder a cada acción, a los usuarios solo mostrar o indexar a los usuarios y cualquier otra persona será rechazada y redirigida con una alerta.

Si necesita más control, puede usar not_authorized! acciones internas para verificar y rechazar el acceso.

Es completamente independiente del sistema de autenticación y puede funcionar sin User modelos o roles predefinidos. Todo lo que necesita es establecer el nivel de autorización para la solicitud actual:

class ApplicationController < ActionController::Base
  def current_clearance_level
    session[:role] || :guest
  end
end

Puede devolver lo que necesite la aplicación aquí, como current_user.role por ejemplo.

Aunque no es obligatorio, incluye un conjunto de útiles adiciones de modelos que permiten hacer cosas como:

<% if current_user.can? :edit, :team %>
  <%= link_to 'Edit team', edit_team_path(@team) %>
<% end %>

Aquí :team se refiere a TeamsController, por lo que el enlace solo se mostrará si el usuario actual está autorizado para acceder al edit acción en TeamsController. También es compatible espacios de nombres.

Puede bloquear los controladores de forma predeterminada, personalizar la ruta de redirección y el mensaje de alerta, etc.

Es muy sencillo y fácil, espero que lo encuentre útil.

Algo que se me sugirió que ahora estamos usando es la gema petergate. Fácil de usar y de aspecto muy limpio con una gran sensación de rieles.

Funciona bien con Devise.

A continuación se muestran algunos ejemplos del archivo Léame.

Si está utilizando devise, está de suerte; de ​​lo contrario, tendrá que agregar los siguientes métodos a su proyecto:

user_signed_in?
current_user
after_sign_in_path_for(current_user)
authenticate_user! 

Esto viene en su User.rb. Agregar más roles es tan fácil como agregarlos a la matriz.

petergate(roles: [:admin, :editor], multiple: false)

Métodos de instancia

user.role => :editor
user.roles => [:editor, :user]
user.roles=(v) #sets roles
user.available_roles => [:admin, :editor]
user.has_roles?(:admin, :editors) # returns true if user is any of roles passed in as params.

Sintaxis de acceso al controlador.

access all: [:show, :index], user: {except: [:destroy]}, company_admin: :all
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *