Лучший способ ограничить действия (редактировать / удалить) с Ruby на рельсах и разработке
-
26-09-2019 - |
Вопрос
Я довольно новичок, чтобы Ruby на рельсах и прямо сейчас я делаю простое приложение. В этом приложении пользователь может создать множество элементов, и я использую разработку для аутентификации. Конечно, я хочу убедиться, что вы являетесь владельцем, чтобы удалить предметы (команды, игроки и т. Д.) И так, как я делаю это сейчас:
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
Это лучший способ? Я думал о том, чтобы положить метод в модели, но я не уверен, что могу получить доступ к Teat_user оттуда. Я также думал о до_filer, что-то вроде:
before_filter :check_ownership, :only => [:destroy, :update]
Я тот случай, и если я хочу кодировать только один метод для всех объектов (все объекты, которые относятся, чтобы иметь «user_id» - поле)
Решение
В моем контроллере приложений я поставил:
before_filter :authorize
def authorize
false # Or use code here to check if user is admin or not
end
Затем я переопределяю способ авторизации в моем фактическом контроллере, чтобы обеспечить доступ к различным действиям.
Другие советы
Вы ищете решение авторизации на вершине своей аутентификации (разработчик)
Вы не можете получить доступ к текущему пользователю в модели NO. У меня было честное количество успеха, используя Aegis Makandra для авторизации. Это позволяет создавать роли указывать разрешения, связанные с каждой ролью. Документы довольно хорошие, и я знаю, что он отлично работает с разработкой, это довольно агности, я также использовал его с клирентом. Он также проходит неявную «Current_user» в ваши разрешения, чтобы вы могли указать и убедиться, что ваш текущий пользователь может принять соответствующие действия.