Лучший способ ограничить действия (редактировать / удалять) с Ruby on Rails и Devise - PullRequest
2 голосов
/ 30 сентября 2010

Я довольно новичок в Ruby On Rails и сейчас делаю простое приложение. В этом приложении пользователь может создавать множество элементов, а я использую devise для аутентификации. Конечно, я хочу убедиться, что вы являетесь владельцем, чтобы удалять предметы (команды, игроки и т. Д.), И то, как я это делаю сейчас:

def destroy
    @team = Team.find(params[:id])
    if current_user.id == @team.user_id 
      @team.destroy    
      redirect_to(teams_url, :notice => 'The team was deleted.')
    else
      redirect_to root_path
    end      
end

Это лучший способ? Я думал о том, чтобы поместить метод в модель, но я не уверен, что могу получить доступ к current_user оттуда. Я также думал о before_filer, что-то вроде:

before_filter :check_ownership, :only => [:destroy, :update]

В этом случае и если я хочу закодировать только один метод для всех объектов (все объекты, к которым это относится, имеют поле "user_id")

Ответы [ 2 ]

1 голос
/ 01 октября 2010

В моем контроллере приложения я вставил:

before_filter :authorize

def authorize
  false # Or use code here to check if user is admin or not
end

Затем я переопределил метод авторизации в моем фактическом контроллере, чтобы разрешить доступ к различным действиям.

0 голосов
/ 01 октября 2010

Вы ищете решение для авторизации поверх вашей аутентификации (разработка)

Вы не можете получить доступ к текущему пользователю в модели №.Я добился большого успеха, используя Aegis Макандры для авторизации.Позволяет создавать роли, указывать разрешения, приписанные каждой роли.Документы довольно хороши, и я знаю, что они отлично работают с Devise, это довольно агностично, я также использовал их с Clearance.Он также передает неявный «current_user» вашим разрешениям, чтобы вы могли указать и проверить, что ваш текущий пользователь может предпринять соответствующие действия.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...