Рано или поздно (но скорее рано) перед каждым
rails-разработчиком возникает эта проблема:
как ограничить доступ к определенным экшенам для тех или иных пользователей приложения. Как разрешить только автору редактировать свои собственные коменты в блоге, а только админу - их удалять, как разрешить доступ к пользовательским ресурсам, хранящимся в db, только их владельцу, например. Плюс любые, разумеется, варианты. Опять же как вариант: можно сходу поставить
cancancan или
pundit (или еще сотня названий гемов), отредактировать
class Ability. Но - всегда ли в этом есть необходимость?
Далее привожу эффектный пример, способ ограничить доступ к ресурсам юзера, создаваемых посредством стандартной формочки scaffold:
Code:
rails generate devise User
rails generate scaffold Campaign name:string user:belongs_to
средствами rails, без установки дополнительных гемов. Мало ли пригодится кому. Итак, users can access their campaigns as this:
Code:
current_user.campaigns
CampaignsController
Code:
def show
#this will search only within current user campaigns.
@campaign = current_user.campaigns.find_by(id: params[:id]).
if campaign
#this campaign exists and its from current_user
...
end
end
def index
#only this user campaigns
@campaigns = current_user.campaigns
end
def new
@campaign = current_user.campaigns.build
end
def create
#This campaign is created with user_id = current_user.id
@campaign = current_user.campaigns.build(campaign_params)
@campaign.save
end
private
def campaign_params
params.require(:campaign).permit(:name)
end