Догадываюсь что есть стандартные и оптимальные решения, поэтому решил спросить. Есть некий ресурс, который работает с MySQL - выводит из БД данные в виде таблицы. Каждую запись можно редактировать или удалить. Для этого в таблице перед каждой записью вывожу ссылки на редактирование и удаление. Но редактировать и удалять могут не все работающие с базой. Авторизация пользователей уже сделана, данные берутся из отдельной таблицы БД. В ней одно из полей - права доступа, по которому и надо ориентироваться. Пока я придумал три варианта: 1. При формировании таблицы проверять права через if и в зависимости от результата выводить или нет ссылку. Но это заставит переписывать в нескольких файлах при изменении условий ограничения (вероятность небольшая, что условия изменятся, но она есть). 2. Написать функцию, которая будет выполнять проверку и дергать ее в нужных местах. 3. Ссылки выдавать всем, а проверку делать на страницах редактирования и удаления. Но это костыли, так не очень хочется делать. Все три варианта рабочие - проверил. Но ни один не кажется правельным. Подскажите, пожалуйста, как лучше?
http://php.ru/forum/viewtopic.php?t=3945 У меня 4 таблицы: Группы, Пользователи, Права, Соответствие прав, пользователей и групп При обновлении страницы выбираются права для пользователя и хранятся в переменной класса, и при необходимости проверяется наличие того или иного права
DarkElf Тогда при изменении условий или добавлении новой кнопки придется во всех файлах переписывать... Luge Я тоже так думаю, но я хотел узнать, может кроме моих вариантов есть какие-либо еще? Проверенные временем. И еще. Если писать функцию, в ней выбор как лучше организовать, через if или case?
Напиши класс вывода case лучше if в таком случае ну смотря как напишешь... думаю какойнить класс лучше подойдет если ты уж так беспокоишься о рефакторинге[/quote]
Всем спасибо, функцию написал, везде где нужно прикрутил, все работает. Можно еще вопрос здесь же, чтобы новую тему не открывать? Начну издалека, т.к. задавая вопросы практикующим програмистам понял, что объяснять в двух словах не умею. Когда делаем запрос в mysql он выглядит так: $res=mysql_query("select * from table"); Если надо "отфильтровать" по какому-либи полю делаем так: $res=mysql_query("select * from table where field1=\"test\""); Если по двум полям, то $res=mysql_query("select * from table where field1 = \"test\" && field2 = 0"); Можно так: $var1="test"; $var2=0; $res=mysql_query("select * from table where field1 = \"$var1\" && field2 = \"$var2\""); Теперь собственно сам вопрос: если в последнем примере понадобиться сделать такой запрос, но при этом из field2 надо взять все значения, чему должно быть равно $var2 ? Пока я делаю просто два запроса, выполняемых по условию, т.е. если надо взять все field2, то делаем $res=mysql_query("select * from table where field1=\"test\""); если из field2 надо взять отдельные значения, то $res=mysql_query("select * from table where field1 = \"$var1\" && field2 = \"$var2\""); но как-то это неправильно (ИМХО). Сейчас есть желание добавить еще одно условие, в этом случае конструкция получается очень неповоротливая.
не видел ты ещё больших конструкций чем это отличается от [sql]select * from table where field1 = "test" [/sql]? давай ещё раз попробуй сформулировать что надо сделать
логику включи. если тебе нужно любые field2, значит тебе посрать на field2 и значит тебе НЕ нужно его... или нужно думаем
Еще раз убедился, что объяснять я не умею. В случае если мы ищем по одному полю не учитывая остальные, у нас один запрос, если по двум полям, то у нас другой запрос. Вопрос был как сделать так, чтобы запрос был один, но в первом случае выбирались все значения одного из полей. Решение уже нашел, получилось достаточно гибкое, но если я его тут приведу, меня закидают гнилыми яблоками Хотя Ваше мнение было бы интересно узнать.
Создавай строку с запросом, дописывай where в его текст в зависимости от того что пришло и будет тебе счастье.