Jump to content
  • 0

разграничение прав на редактирование


cmp
 Share

Question

Здравствуйте, уважаемые форумчане.

Описание системы: есть база знаний, написана мною на php+mysql. В ней есть статьи (они хранятся в базе), их могут редактировать пользователи, которые находятся в группе, у которой есть права на редактирование данной статьи.

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

Вопрос: можно как-то сделать так, чтобы если один пользователь редактирует статью, то к ней не было доступа у других пользователей? Или хотя бы другим пользователям выводилось предупреждение, что статью уже редактируют в данный момент?

Link to comment
Share on other sites

6 answers to this question

Recommended Posts

  • 0

1. Я бы не стал хранить статьи в MySQL — лучше в файлах

2. Я бы сделал разные версии. То есть кто-то отредактировал статью — она записалась в отдельный файл и информация об изменениях (когда и кем) записалась бы в БД. Можно мержить вручную, а можно и написать какой-то автоматческий мержер.

Link to comment
Share on other sites

  • 0

А если просто в базу добавить колонку 'редактируется' в которой хранится статус статьи. при выборе статьи проверять в запросе эту колонку. т.е. если статус например == 0 ,то монжо открыть и редактировать, если 1 то открыть нельзя

Edited by Kosmos
  • Like 1
Link to comment
Share on other sites

  • 0

Спасибо за ответы. Сделал что-то среднее. Т.е. сейчас если пользователь заходит в форму редактирования статьи, то в базе отмечается, что статья на редактировании, также в базе пишется дата и время, с которого статья редактируется. Если еще один пользователь захочет отредактировать эту статью, то возможны 3 варианта:

1) если не прошло 10 минут после начала предыдущего редактирования, то статья недоступна.

2) если прошло больше суток после начала предыдущего редактирования, то в базе ставится текущая дата-время, т.е. пользователь может редактировать основную статью.

3) в интервале между 10 минутами и сутками пользователь может создать версию статьи.

Как-то так, но сейчас рассматриваю еще один вариант, на java написать какой-нибудь таймер активности пользователя, который бы при неактивности пользователя в течении, скажем, 10 минут сбрасывал бы метку занятости со статьи. Если кто-нибудь знает как можно такой таймер организовать, то буду весьма признателен, если он поделиться решением. Хотя я понимаю, что тема именно PHP исчерпана, так что может лучше спросить в форуме javascript?

Link to comment
Share on other sites

  • 0

Как-то так, но сейчас рассматриваю еще один вариант, на java написать какой-нибудь таймер активности пользователя, который бы при неактивности пользователя в течении, скажем, 10 минут сбрасывал бы метку занятости со статьи. Если кто-нибудь знает как можно такой таймер организовать, то буду весьма признателен, если он поделиться решением. Хотя я понимаю, что тема именно PHP исчерпана, так что может лучше спросить в форуме javascript?

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

cleartimeout();

и следом сразу запускает

settimeout() на 10минут ,с функцией которая через аякс запрос меняет статус статьи в базе

Edited by Kosmos
Link to comment
Share on other sites

  • 0

Все, со всем разобрался и вроде все сделал. Сделал так: при входе на страницу редактирования ставится в джаве переменная активности, если пользователь водит мышкой, нажимает на кнопки в полях ввода, то переменная активности становится равной 1, иначе 0. Раз в 5 минут с помощью setInterval() проверяю, если активность 0, то отправляю на главную, где обнуляю флаг занятости статьи. Проблема решена, всем спасибо за помощь.

Edited by cmp
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. See more about our Guidelines and Privacy Policy