Как создать сетку роли пользователя - PullRequest
0 голосов
/ 15 сентября 2010

У меня есть следующие таблицы:

       users (id, username, ... )
       roles (id, name)
 roles_users (user_id, role_id)

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

        Login  Editor  Admin
Alice     ■      ■       ■
Bob       ■      □       □      
Carol     ■      ■       □

                      [Apply]

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

Я использую каркас Kohana 3, если есть что-то, что может сделать это еще проще, но я, конечно, приветствую любой ответ.

Ответы [ 2 ]

0 голосов
/ 15 сентября 2010
  1. По умолчанию roles таблица содержит поля name и description, используйте его для создания флажков.
  2. Я бы предпочел изменить разрешения для один пользователь одновременно. Что-то вроде этот: Login Editor Admin Alice ■ □ ■ [Apply]
  3. ORM в Ko3 не поддерживает "магию" HABTM и обеспечить add() / has() / remove() методы для работы с отношениями «многие ко многим» . Так что вы должен сначала удалить (), чтобы удалить старые настройки (вот мое исправление для remove() способ удалить все роли одновременно), а затем позвоните add() для каждой новой роли. Другой способ перебирать роли и проверить каждую роль с $user->has('role', $role).

    Слишком много запросов для меня :) Вы можете хранить оригинальные пользовательские роли и рассчитать различия ($removed_roles и $new_roles) перед сохранением. Использовать БД Query Builder для удаления $removed_roles и добавьте $new_roles (максимум 2 запроса).

PS. Да, мой английский отстой, я это знаю;)

0 голосов
/ 15 сентября 2010

Я сделал нечто подобное с Kohana2. Используя его модели для пользователя и роли, установка ролей для пользователя была такой же простой, как $user->roles = $rolesArray. Тогда $user->save() знал, что обновлять / вставлять автоматически.

Способ присвоить флажкам имена name="userid[]" value="roleid", поэтому name="1[]" value="2". Они будут отображаться в виде массивов php при отправке формы для каждого идентификатора пользователя. Затем вы можете превратить их в массивы и назначить их каждому объекту пользователя.

...