Arhn - архитектура программирования

Авторизация с помощью Devise и несколько уровней

Мне нужна помощь с авторизацией. До сих пор я пытался решить эту проблему с помощью внутренней авторизации rails в сочетании с devise. У меня есть пользователь, который публикует запрос. Если этот запрос является частным, только группа «читателей» может видеть запрос и отвечать на него. (Это номер один)

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

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

 before_filter :require_reader!, only: [:open_requests]

Но если запрос не скрыт, то все же только читатель должен иметь возможность ответить на запрос (но все его видят). Вот не знаю как этим управлять. Любые идеи?

Продолжение... Мне не удалось решить вторую проблему (что рейтинг видит только тот, кто размещал заявку и читатель). Любые идеи здесь?

Может канканкан вариант?

Лучший витали


  • Что вы используете для определения группы читателей? Devise используется для аутентификации пользователя, чтобы вы знали, кто он такой, но для управления членством в группах и разрешениями необходимо использовать некоторую вашу собственную логику или другую библиотеку. 04.02.2015
  • Cancancan или xacml - это путь 05.02.2015
  • @LisaD: я использую генератор www.railsbricks.net (действительно круто!), И он поставляется с функцией администратора. Я применил это к читателю. Однако вопрос в том, как ограничить функциональность (опубликовать и просмотреть). Все могут видеть это, но только читатель может опубликовать ответ. DavidBrossard: Спасибо, я проверю xacml. 07.02.2015

Ответы:


1

То, что вы делаете, не совсем соответствует шаблону «администрирования», который обычно настраивается с помощью таких инструментов, как Railsbricks. Шаблон разрешений «admin» обычно представляет собой целый набор действий/представлений, доступных только администраторам, поэтому часто весь контроллер или семейство контроллеров имеют :require_admin! фильтр применяется перед каждым действием и представлением. Очень простая логика разрешений, и она зависит только от пользователя и представления.

Вместо этого у вас есть представления с разрешениями, которые зависят от состояния вашего объекта, а также от статуса пользователя и представления. Таким образом, вам придется написать свой собственный фильтр вместо использования «require_reader!».

Например, у вас может быть RequestsController, и вы можете добавить к нему:

  before_action :must_be_able_to_view_request, except: [:index, :new, :create]

Затем определите этот фильтр в контроллере:

  private
  def must_be_able_to_view_request
    if !current_user.is_reader? && [email protected]
       head :forbidden
    end
  end

Если вам нужно использовать тот же фильтр в других контроллерах, вы можете определить его в своем ApplicationController.

10.02.2015
  • Вы правы со всем контроллером. Это хороший момент. Я попробую ваш вариант фильтра и дам вам знать, когда у меня будут результаты. Большое спасибо за вашу помощь! 12.02.2015
  • Новые материалы

    Коллекции публикаций по глубокому обучению
    Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

    Представляем: Pepita
    Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

    Советы по коду Laravel #2
    1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

    Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
    Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

    3 способа решить квадратное уравнение (3-й мой любимый) -
    1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

    Создание VR-миров с A-Frame
    Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

    Демистификация рекурсии
    КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..