Пользователи и вложенные (но потенциально независимые) «группы» в Rails 3? - PullRequest
0 голосов
/ 20 мая 2011

У меня возникли некоторые проблемы, когда я что-то оборачиваю. По сути, я начинаю новый проект, в котором участвуют группы групп, группы групп… ну, вы поняли.

В любом случае, единственная модель, которая несколько «универсальна» для всего приложения, - это концепция пользователей (поскольку именно они определяют, какие привилегии имеет любой человек). Проблема возникает, когда у вас есть группы, которые могут «владеть» другими группами. Например, у вас может быть «городская» глава, которая принадлежит «государственной» главе, которая принадлежит «национальной» главе и т. Д. И каждая глава может иметь своих собственных пользователей, когда затем они имеют права на все группы ниже них. .

Однако дело в том, что ни одна группа не может принадлежать (или использоваться) другой группе, поэтому им необходимо управлять независимо. Я не могу полностью осмыслить, какой будет методология для обработки чего-либо такого рода. Я имею в виду, что, возможно, я мог бы использовать какую-то установку act_as_nested, но я боюсь, что даже это может выйти из-под контроля. Кроме того, что касается самих групп, следует ли мне использовать какую-то модель наследования (учитывая, что они, вероятно, будут иметь много общих свойств)?

Возможно, мне следует просто создать отдельную настройку MVC для каждой группы - хотя по-прежнему существует проблема объединения пользователей и т. Д. Кто-нибудь может предложить предложения?

Лучший

1 Ответ

0 голосов
/ 20 мая 2011

Вы можете создать таблицу групп, которая ссылается на себя.Это позволило бы хранить все данные вашей группы в одной таблице, и волшебство делается с помощью ассоциаций.

У Райана Бейтса есть Railscast , который, вероятно, можно настроить в соответствии с вашей ситуацией.например, не дружеские отношения, наличие собственности или что-то в этом роде.

Редактировать: помогает только один родитель.Похоже, что плагин acts_as_tree , вероятно, будет работать для поставленной задачи.Для этого плагина у Райана Бейтса также есть эпидсод Railscasts .

Цели

1: разрешить группам иметь детей, родителей Решение :acts_as_tree

2: Позволить группам стать или оставаться независимыми. Решение : acts_as_tree.Просто удалите parent_id, и группа станет ее собственным корневым узлом

3: Обеспечить иерархию (например, города не могут иметь другой город в качестве родителя). Решение : Это, вероятно, должно быть выполнено с помощью пользовательской проверки

4: Наследование прав пользователей.Я ожидал, что эта конкретная цель будет самой сложной.Конечно, я не знаю всех входов и выходов того, что "права" означают для вашей заявки, но я сделаю некоторые предположения ... вы заполняете пробелы, где я ошибаюсь.После того, как у вас есть ассоциации между пользователями и группами (и возможные таблицы «прав»). Решение : Чтобы определить, должны ли права применяться к current_user для current_group, а) проверить владение и, если нет, б) перебирать current_group.ancestors до тех пор, пока вы не получите ответ или не достигнете корня.звучит как веселый проект.Я желаю вам удачи с этим!

...