Показать сообщение отдельно
  #2 (permalink)  
Старый 12.07.2017, 05:45
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

Ceргей, офигеть, и в чем же ваше ноу-хау?

Если в системе предполагается будущее расширение прав, как собственно и любой иной опции/характеристики, присущих сущности, то они и будут храниться в связанной таблице, тут вы Америки не открыли.

Но если права определены, что зачастую и нужно, то иметь отдельную таблицу для них это накладно, а права можно описать в таблице самих пользователей полем тип SET если пользователь может быть наделен несколькими правами или полем типа ENUM если только одно право.

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

Всю информацию о таблице пользователей можно получить ее представлением:

SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = "base" AND TABLE_NAME = "table"

и в выборке для COLUMN_TYPE равных enum или set получить информацию для списков (в случае set список будет multiple):

//параметры enum/set
preg_match_all("/(?<=')[^',]+(?=')/ui", $row->column_type, $val);
//опции списка enum
$enum = array_combine(range(1, count($val[0])), $val[0]);
//оции списка set
$set = array_combine(array_map(function($k) {
    return 1 << $k;
}, array_keys($val[0])), $val[0]);


И даже в 32-ой системе таким набором set вполне хватит описать права нужные, конечно если не иметь: разрешено добавлять "А", разрешено добавлять "Б", ...

Последний раз редактировалось laimas, 12.07.2017 в 06:01.
Ответить с цитированием