У меня есть столбец в users
таблице с именем permissions
.Например:
// users
+---------+-----------------+-------------+
| id | permissions | name |
+---------+-----------------+-------------+
| int(11) | bit(15) | varchar(20) |
+---------+-----------------+-------------+
| 1 | 001100001111101 | Jack |
| 2 | 111111111111111 | Peter |
| 3 | 110000000111011 | Martin |
+---------+-----------------+-------------+
Как видите, столбец permissions
имеет тип данных bit(15)
.Каждый бит этого значения определяет одну способность пользователя.Например, первый бит относится к способности voting
, второй - к муравью commenting
и т.д. ...
Также у меня есть триггер BEFORE UPDATE
, который исследует это разрешение следующим образом:
SELECT permissions INTO @deleting_permission FROM users WHERE id = new.deleter_id;
IF old.deleted <> new.deleted THEN
IF (IFNULL((@deleting_permission & b'10000000000' > 0), 0) < 1) THEN
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = "You cannot delete post";
END IF;
END IF;
И всегда выдает:
Вы не можете удалить сообщение
Даже для # 2 пользователя , который имеет 111111111111111
значение разрешения.Так что не так?
Заметил, что я обновляю столбец permissions
следующим образом:
-- To give some specific accesses (permissions) to the user
UPDATE users SET permissions = b'111111000101011' WHERE id = ?
-- To give full access (permissions) to the user
UPDATE users SET permissions = -1 WHERE id = ?