Как внедрить систему разрешений, такую ​​как highrise или facebook - PullRequest
6 голосов
/ 17 января 2011

Эй, я ищу систему разрешений, как в highrise или facebook.

Проблема с такой проблемой заключается в том, что разрешения должны быть определены для экземпляра объекта (видимость). Вдобавок ко всему, я могу думать о сохранении user_ids или group_ids в хэше для каждой записи. Это лучший способ сделать это?

Я использую mongodb, чтобы было легче. Хотя мы можем переключиться на sql (highrise, вероятно, делает это с sql).

Редактировать: я закончил тем, что написал драгоценный камень, который работает с Mongoid, вы можете прочитать больше об этом здесь

Ответы [ 3 ]

2 голосов
/ 18 января 2011

@ Абхишив: с учетом этой задачи я бы применил некоторую форму соглашения для установки доступа по полю.

Учитывая объект, подобный следующему:

{
  name : "me",
  user : "me01234",
  salary : "100",
  address : "123 Nowhere drive"
}

Я бы добавилделая что-то вроде этого:

{
  name : "me",
  user : "me01234",
  salary : "100",
  address : "123 Nowhere drive"
  p_salary : [ 'g/accounting', 'g/management', 'u/owner' ]
  p_address : [ 'g/accounting', 'g/hr', 'u/me' ]
}

С такими соглашениями вы можете поддерживать права доступа на уровне документов.И довольно просто понять, как запрограммировать такую ​​вещь.

Теперь обычно вам нужны права доступа как для объекта, так и для самой коллекции.Это держит весь процесс гораздо более сухим.Для этого я просто собрал бы коллекцию «полномочий», которая содержит разрешения по умолчанию для каждой другой коллекции в БД.

Вдобавок ко всему, я не знаю ни одной платформы, которая делает это"из коробки".Я хотел бы взглянуть на Mongoid и MongoMapper и посмотреть, если этот тип детализации не подходит для плагина.

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

Загляните в Канкан: https://github.com/ryanb/cancan

...