Я недавно использовал CanCan в проекте и думаю, что это было круто.Вы создаете класс Ability и используете его, чтобы решить, может ли пользователь «выполнить» действие ... Вы можете проверить наличие разрешений в таблице в методе или их набор правил разрешает действие.
Я взял весь этот пример кода из gitub readme:
class Ability
include CanCan::Ability
def initialize(user)
if user.admin?
can :manage, :all
else
can :read, :all
end
end
end
Затем в ваших представлениях и вашем контроллере вы можете проверить уровни авторизации
<% if can? :update, @article %>
<%= link_to "Edit", edit_article_path(@article) %>
<% end %>
def show
@article = Article.find(params[:id])
authorize! :read, @article
end