Я пытаюсь сделать мой код аутентификации / разрешений более лаконичным.
В настоящее время у меня есть это:
def index
require_role "normal" do
@projects = Project.all
respond_to do |format|
format.html
end
end
end
где require_role
обрабатывает проверку разрешений и перенаправление на страницу с ошибкой, если вы пытаетесь сделать что-то, чего не следует делать.
Я бы хотел иметь возможность разместить что-то вроде этого в верхней части каждого контроллера:
require_role "admin", [:delete]
require_role "normal", [:edit, :new, :create]
require_role "guest", [:show, :index]
определил что-то вроде:
def self.require_perm( role_name, actions )
before_filter :require_perm_admin, :only => actions
end
Единственная проблема заключается в том, что мне нужно жестко закодировать название метода, require_perm_admin
. Это означает, что если я когда-нибудь добавлю новые роли, мне придется определить метод для каждой из них.
Можно ли добавить динамически именованные методы в класс? например "check_role_admin", "check_role_guest" и т. д.
В противном случае, могу ли я сказать, какое действие должно быть вызвано из моей before_filter
функции?