Как видно из заголовка, я унаследовал приложение php / MySQL, которое имеет довольно хорошо написанный процедурный код, но имеет только один логин администратора. Клиент, естественно, хочет разделить функциональность на разных пользователей / ролей и в конечном итоге обновить код приложения с помощью передовых методов.
В качестве примера обновления чьего-либо имени пользователя в разделе администратора в исходной версии просто отображается текстовое поле, предварительно заполненное именем пользователя (код для краткости упрощен):
<input type="text" name="username" value="<?= $username; ?>">
Затем проверяется POST по регулярному выражению и сохраняется в базе данных.
Меня попросили посмотреть, как изменить существующий код, чтобы он мог работать с различными пользовательскими "ролями", и довольно удачно смоделировали пример приложения с таблицами, такими как user
, role
, permission
user-role
и role-permission
, чтобы объяснить, как это будет работать на практике. Мне просто интересно, есть ли у кого-нибудь из вас советы о том, как записать разрешения в кодовую базу? Разумно ли просто обернуть существующий код либо в шаблон, либо в функцию в нечто вроде:
// $access_type can be the result of a function call, an array value, etc.
switch($access_type){
case 'edit':
echo '<input type="text" name="username" value="' . $username . '">';
break;
case 'readonly':
echo $username;
break;
case NULL:
default:
// Don't display anything.
}
Мой вопрос: насколько хорошо это масштабируется с большими кусками кода? Есть пара «интерактивных функций», которые используют довольно много HTML и JavaScript, чтобы POST вернуть несколько значений одновременно. У нас была бы отдельная версия этого пользовательского элемента управления для каждой роли. Приклеивание каждой версии к switch
немного пахнет (встроенный код или включается в отдельный файл) ... Аналогичным образом, в серверной части сценарий для обработки POST будет иметь несколько версий в зависимости от роли.
Я знаю, что должно быть сто способов сделать это, но что другие люди делали в прошлом? Если у вас есть какое-то понимание, не могли бы вы продемонстрировать это в процедурном стиле, так как в этом проекте нет ОО! Спасибо!