Rails авторизация?проверить модель против контроллера - PullRequest
1 голос
/ 26 января 2011

Я проверяю модель user, чтобы определить, есть ли у него один или несколько task_list, если только у нее более одного списка задач, ей разрешено удалять его, в противном случае выдается исключение.У меня в основном есть метод с именем delete_list в пользовательской модели, позволяющий удалять краткие сообщения, такие как user1.delete_list(list1)

. Я спорю о том, следует ли помещать чек в CanCan, где он будет применяться в качестве фильтра до на контроллереили иметь ли это в пользовательской модели также.Какова рекомендуемая практика?

1 Ответ

1 голос
/ 27 января 2011

Я думаю, что хорошим DRY-подходом было бы создание в вашей модели метода, который проверяет, разрешено ли удаление. Затем используйте этот метод из вашего контроллера или из способность. ИМХО Я думаю, что сложная логика разрешений / бизнес-логики, отделенная от CanCan, лучше, когда есть вероятность, что вы в будущем можете перейти на другую систему разрешений.

В вашей модели:

def can_destroy_list(list)
   ... Do check here ....
end

В способности.рб

can :destroy, List do |list|  
    user.can_destroy_list(list)
end  

Ваш контроллер и представления могут также использовать can_destroy_list непосредственно в экземпляре модели, если это необходимо или использовать: если can? :destroy, @list

...