Регистрация
Вход через соцсети
Восстановление пароля

редактирование объекта не авторизованным пользователем

Новый топик
18.05.2010, 13:38
Ответить | Цитировать
jobrun

Зарегистрирован:
2010-05-18
Сообщений: 4

редактирование объекта не авторизованным пользователем по паролю возможно так сделать?
т.е имеется шаблон
в нем ряд разнообразных полей ввода в том числе и поле password
не авторизованный пользователь заводит эти поля и указывает пароль для последующего его редактирования.
в Отображении объекта пишем
<form action='$editLink'>
пароль: <input type='text' name='s' value='' size='5'><input type='submit' value='Ok'>
</form>
а в 'альтернативной форме изменения' пишем так
if ($_GET['s']=="$f_password") { echo "форма изменения";}
else { echo " неправельный пароль";}

но редактирование всех объектов имеет право только админ!!!!

можно ли как нибудь реализовать редактирование объекта не авторизованным пользователем по паролю?


18.05.2010, 14:10
Ответить | Цитировать
malich
Андрей Малков

Зарегистрирован:
2005-08-09
Сообщений: 522

А почему нет, вы сами все написали, прикрепляем компонент к разделу, в настройках раздела ставим доступ на добавление и изменение для всех

К стандартному условию добавления объекта дописываем
Код:
$f_password = md5($f_password);

чтобы не таскать пароли в открытом виде

в нужном месте делаем ссылку на редактирование
Код:

<form action='$editLink'>
пароль: <input type='password' name='password' value='' size='5'>
<input type='submit' value='Редактировать'>
</form>


Затем создаем альтернативную форму изменения
Код:
".($admin_mode?"форма редактирования в режиме администратора": NULL)."

".(!$admin_mode && $f_password==md5($password)?"
форма редактирования для пользователей

чтобы не потерять пароль нужно будет добавить скрытое поле
<input type='hiden' name='password' value='".md5($password)."'>
":"
здесь сообщение если пароль не правильный
")."


В стандартное условие изменения объекта дописываем
Код:
if (!$admin_mode){

if ($f_password != $password){
$posting=0;
$warnText="Неверный пороль";
}

if (!$password){
$posting=0;
$warnText="Укажите пароль";
}

}


Мог где то нахимичить, но логика такая.
18.05.2010, 14:39
Ответить | Цитировать
jobrun

Зарегистрирован:
2010-05-18
Сообщений: 4

дело в том что у меня в Доступе на раздел поставлено
все пользователи имеют право на:
просмотр
добавление
изменение
подписка

но все равно не работаетгрустный

18.05.2010, 15:07
Ответить | Цитировать
malich
Андрей Малков

Зарегистрирован:
2005-08-09
Сообщений: 522

по умолчанию редактировать запись может только ее создатель.
18.05.2010, 16:55
Ответить | Цитировать
jobrun

Зарегистрирован:
2010-05-18
Сообщений: 4

Создатель получается Гость с User_ID = 0
т.е. все добавившие объект это гости с User_ID = 0 тогда и редактируют тоже гости с User_ID = 0!!!
т.е получается если Гость что то создал то и Гость может отредактировать
19.05.2010, 07:26
Ответить | Цитировать
malich
Андрей Малков

Зарегистрирован:
2005-08-09
Сообщений: 522

что значит не работает? что пишет при попытке редактировать?
19.05.2010, 09:37
Ответить | Цитировать
jobrun

Зарегистрирован:
2010-05-18
Сообщений: 4

выдает ввести логин и пароль
19.05.2010, 11:15
Ответить | Цитировать
malich
Андрей Малков

Зарегистрирован:
2005-08-09
Сообщений: 522

Да действительно, гостю не дает редактировать.
Нужно подумать как это можно обойти. как вариант вы можете сделать следующим образом.

создайте новый компонент, прикрепите его к разделу с действием по умолчанию добавление.
Затем из нужного места делайте ссылку на этот раздел. в ссылке по мимо всего прочего нужно передать id записи:
Код:
razdel?id=$f_RowID

или
Код:
<form action='razdel'>
<input tupe='hiden' name='id' value='$f_RowID'>
....
</form>


В компоненте создаем альтернативную форму добавления с нужными полями данные в эти поля подтягиваем sql запросом например
Код:
<textarea name='f_text' rows='5' cols='60'>".listQuery("SELECT text FROM MessageXX WHERE Checked=1 AND Message_ID='$id'", "$data[text]")."</textarea>


В действии после добавления объекта пишем примерно следующие
Код:
$db->query("UPDATE `MessageXX` SET `text` = '$f_text' WHERE `Message_ID` = $id");


После добавления записи и обновления нужного сообщения вы также sql запросом можете удалять эту запись или строить на их основе историю изменения исходных записей.
198 196 2010-05-19 11:15:22 9952
Описание проекта