сущность пользователя / таблица - Моделирование этих отношений - PullRequest
1 голос
/ 05 апреля 2011

OK. Это может быть не слишком умный вопрос, но я все равно задам его. Я слишком долго работала над моделью этого проекта, чтобы стыдиться ... Все это прекрасно работает без таблицы 'users' ... yipee for me: - /

Итак, как мне правильно смоделировать это? Модель ACL выглядит следующим образом: (FYI "->" означает "больше чем" в этом иерархическом представлении) и имеет определенные разрешения, которые больше, чем у других пользователей

System Admin => Shops => Shop Admins => Workers => Clients => Anonymous  

Как мне моделировать «пользователей», когда есть несколько типов «пользователей», у каждого из которых есть своя таблица?

Например, допустим, есть 2 роли ACL для «пользователей». «МАГАЗИН РАБОТНИК» и «КЛИЕНТ». Как мне работать с таблицей «пользователи» в этом сценарии? Это, назначив 'user_type' в таблице 'users', например:

table .users
- user_id = "1"
- user_name = "Joe"
- user_type = "5" (where "user_type"=5 delivers the needed powers...)

Или я спаз? Я что-то здесь упускаю? Мне нужна ОДНА таблица «ПОЛЬЗОВАТЕЛЕЙ» с несколькими различными типами пользователей, которым всем нужны разные типы информации, которые должны быть частью их профиля, что, казалось бы, имеет смысл иметь разные таблицы для каждого типа пользователя ... «РАБОЧИЕ МАГАЗИНЫ» добираются до добавьте свои данные в свою таблицу, и «КЛИЕНТЫ» смогут добавить свои данные в свою собственную таблицу.

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

Ответы [ 2 ]

0 голосов
/ 05 апреля 2011

Судя по вашему вопросу, похоже, что вы пытаетесь создать ACL и систему хранения метаданных одновременно.Это может быть немного сложно разобрать.

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

  • У пользователей есть системаобщесистемные привилегии на основе типа уровня аутентификации.
  • Пользователи имеют общесистемные привилегии, которые предоставляются пользователем, имеющим одну или несколько ролей.
  • Пользователи имеют разные привилегии в зависимости от уровня аутентификациив контексте конкретных ресурсов.

Вы можете описать первый или второй случай в зависимости от его нюансов.Вот пример первого:

class User < ActiveRecord::Base
  belongs_to :role
end

class Role < ActiveRecord::Base
  # Defines methods to determine ACL privileges
end

Второй вариант немного более гибок, но также медленнее при попытке разрешить простой случай да / нет, потому что нужно проверить больше ролей.

class User < ActiveRecord::Base
  has_many :grants
  has_many :roles, :through => :grants
end

class Grant < ActiveRecord::Base
  belongs_to :user
  belongs_to :role
  # Defines methods to determine ACL privileges
end

class Role < ActiveRecord::Base
  # Defines methods used by Grant ACL implementation
end

Если вам нужно сохранить какую-то конфигурацию или метаданные о том, что каждая роль предоставляет пользователю, поместите это в модель Гранта в качестве дополнительных полей.

0 голосов
/ 05 апреля 2011

Предполагая, что все user_types имеют одинаковые столбцы / атрибуты, и при условии, что вы называете их «ролями»

table role
 -idRole (int)
 -roleName (varchar X) 
 -description (varchar or text or what have you.)
 -permLevel (int)
 -etc

Затем сделайте точно так, как предложено, и используйте idRole в качестве записи в вашей пользовательской таблице.

если ваши роли более сложны или вы назначаете несколько уровней / типов разрешений для одной роли, вы, вероятно, захотите разделить их на таблицу типов внешних ссылок

, если вы опубликуете различные пользовательские типы / ролиВозможно, кто-то может указать, если они не настроены или не нормализованы для того, как вы хотите делать вещи в своей голове.Я бы просто спросил в комментариях, но пока не могу их опубликовать, извините.

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