Devise предоставит вам только аутентификацию.Это означает, что у вас есть определенный уровень уверенности в том, что пользователь идентифицирован и является тем, кем он / она говорит, что он / она является.Учитывая эту информацию, вы можете использовать механизмы Rails или другие гемы Rails (например, CanCan, Aegis, Declarative_authorization) для авторизации пользователей и определения разрешений.
Простым методом будет использование before_filter
на вашем контроллере, чтобы определить, например, принадлежит ли BlogPost
пользователю, который вошел в систему.
Вот простой пример того, что я имею в виду:
class BlogPostsController < ApplicationController
before_filter :is_user_allowed, :only => [:edit, :delete, :show]
# default Rails generated RESTful methods here
def is_user_allowed
if BlogPost.find(params[:id]).try(:user_id) != current_user.id
redirect_to access_denied_page_path
end
end
end
Метод is_user_allowed
извлекает запрашиваемый BlogPost
и определяет, разрешено ли current_user
выполнять действие, путем сравнения идентификаторов пользователей.Если неравенство истинно, то оно перенаправляется на наш печально известный access_denied_page_path
.
Для получения дополнительной информации о фильтрах см. Эту статью Edge Guides .
Для получения дополнительной информации оRails gems, которые могут предоставить вам эту функциональность (и больше ), посмотрите на Google и поищите rails authorization
.Кроме того, вот некоторые Railscasts, которые должны предоставить некоторую информацию: