Как создать сетку роли пользователя

0

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

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

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

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

                      [Apply]

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

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

Теги:
forms
kohana-3

2 ответа

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

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

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

0

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

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

  • 0
    Приятно. не похоже, что я могу передать массив отношениям x-ко-многим в KO3.
  • 0
    О хорошо Я не играл с Kohana3, но я предполагал, что такая хорошая функциональность была бы перенесена. Вы всегда можете быстро удалить все роли для этого пользователя, а затем вставить новые, хотя это не очень эффективно. Или получите существующие роли в массиве, сравните с новыми (например, array_diff() ) и удалите или вставьте соответственно.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню