Если вы хотите сохранить это как один столбец, используйте base 2
заполнители.
1 - represents priv 1
2 - represents priv 2
4 - represents priv 3
8 - represents priv 4
16 - represents priv 5
32 - represents priv 6
Затем вы можете взять модуль каждого из них, чтобы определить, есть ли у них эта привилегия.
Так ..
3 = priv 1 and priv 2
9 = priv 1 and priv 4
63 = all privs.
и т. Д.
Может быть проще, если ваша личная таблица будет разрешать несколько записей на пользователя.
РЕДАКТИРОВАТЬ: Если вы все еще хотите использовать один столбец для хранения priv, добавьте еще один столбец, в котором хранятся, кто дал разрешение.
Но ... Я бы по-прежнему предлагал хранить каждую привилегию отдельно.
Создайте таблицу с объединенным первичным ключом для priv, user_id и grantor .
Объединенный первичный ключ обеспечит уникальность каждого priv, поэтому вам не нужно проверять его перед вставкой. Чтобы создать комбинированный первичный ключ:
ALTER TABLE priv ADD PRIMARY KEY (user_id,grantor,priv_id);
Затем добавить или сбросить прив, REPLACE INTO priv (user_id,grantor,priv_id) VALUES (?,?,?)
Чтобы удалить привилегию для пользователя, DELETE FROM priv WHERE user_id = ? AND priv_id = ?
Чтобы удалить все привилегии для пользователя, DELETE FROM priv WHERE user_id = ?
Чтобы удалить всех суб-пользователей для лица, предоставляющего право ... DELETE FROM priv WHERE grantor = ?
Получение всех привилегий для пользователя в лице лица, предоставляющего право: SELECT * FROM priv WHERE user_id = ? AND grantor = ?