Как ограничить возвращаемые записи на основе пользовательских ролей? - PullRequest
2 голосов
/ 06 января 2011

У меня есть сайт Rails 3, над которым я работаю, есть пользователи, которые работают с «документами».

Если бы у каждого документа был user_id, то для метода редактирования в моем контроллере документов я мог бы ограничить результаты документами, принадлежащими текущему пользователю, что-то вроде:

@doc = current_user.documents.find(params[:id])
respond_with(@doc)

К сожалению, не все так просто. Каждый пользователь может иметь отношения с документом посредством промежуточной «подписки» - он может быть владельцем, редактором или читателем.

Итак, теперь в моем методе редактирования я хочу иметь возможность ограничить извлеченный документ теми, кто является владельцем или редактором. Как мне это сделать? В настоящее время у меня есть область в моей модели документа, как:

scope :editable_by, lambda { |user| joins(:subscriptions).where("user_id = ? AND (subscriptions.role = ? OR subscriptions.role = ?)", user.id, Subscription::ROLES['owner'], Subscription::ROLES['editor']) }

чтобы я мог перейти к своему методу редактирования:

@doc = Document.editable_by(current_user).find(params[:id])

Есть ли лучший способ?

1 Ответ

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

Не думаю, что вы найдете лучший способ.Например, я склонен использовать CanCan для авторизации, который предоставляет встроенные вспомогательные методы, только если ваша модель имеет атрибут, указывающий права доступа (например, owner_id).

В противном случае вам все равно придется реализоватьсфера или метод на вашей модели.Поэтому, если я не ошибаюсь, вам будет трудно найти лучший способ, чем у вас есть в настоящее время.

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