Форум поддержки пользователей ZeroParking

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » Форум поддержки пользователей ZeroParking » Галерея скриптов » Доступ к теме по записи в дополнительном поле вместо пароля <


Доступ к теме по записи в дополнительном поле вместо пароля <

Сообщений 1 страница 26 из 26

1

У меня давно была идея сделать разграничение для доступа пользователей к некоторым темам, используя дополнительное поле в профиле пользователя. (Возможность создавать небольшие закрытые тусовки, кружки, гильдии на форуме )
Это удобнее пароля тем что не нужно запоминать еще и пароль к теме, но взамен жертвуется одно из дополнительных полей профиля (в частности поле номер 5)

Итак:

Нам потребуется поставить два скрипта...

В HTML-верх ставится следующий скрипт:

Код:
<script type="text/javascript">
var tpc_locks = new Array('1','2','3');    // Список закрытых тем
var forum="http://адрес форума/"
var tpc_tec='';
if (tpc_locks.length!=0){
if (location.href.indexOf(forum+"viewtopic.php?id=")==0){
i=parseInt(tpc_tec=location.href.substring(forum.length+17));
for (j=0; j<tpc_locks.length; j++) { if (i+''==tpc_locks[j])
{ if (GroupID==3) {tpc_notdisp() ; alert("Гостям запрещен просмотр этой темы"); location.href=forum }
else if (GroupID!=1 && GroupID!=2 && document.referrer.indexOf(forum+"viewtopic.php?id="+i)==-1 && document.referrer.indexOf(forum+"profile.php?section=fields&id="+UserID+"???jst"+i)==-1){ 
tpc_notdisp(); location.href=forum+"profile.php?section=fields&id="+UserID+"???jst"+tpc_tec  };
break}}}
else if (location.href.indexOf(forum+"profile.php?section=fields&id="+UserID+"???jst")==0){
tpc_tec=location.href.substring(location.href.indexOf("???jst")+6); tpc_notdisp() }
else if (location.href.indexOf(forum+"post.php?tid=")==0) {
i=parseInt(location.href.substring(forum.length+13));
for (j=0; j<tpc_locks.length; j++) {if (i+''==tpc_locks[j])
{ if (document.referrer.indexOf(forum+"viewtopic.php?id="+i)==-1 && document.referrer.indexOf(forum+"post.php?")==-1){
tpc_notdisp(); tpc_notlook()}; break }}}
}
function tpc_notdisp()
{document.write('<style type="text/css"> HTML, BODY { display: none } </style>') }
function tpc_notlook()
{alert ("У вас нет допуска к этой теме"); location.href=forum}
</script>

Во второй строчке нужно выставить свои номера закрытых тем, а в третьей свой адрес форума.
Номер темы посмотреть можно по адресу темы
например: "http://Форум.0pk.ru/viewtopic.php?id=534"
здесь номер темы 534 записать его надо будет '534'

В HTML-низ ставим следующий скрипт:

Код:
<script type="text/javascript">
var forum="http://адрес форума/"
if (tpc_tec!='' && location.href==forum+"profile.php?section=fields&id="+UserID+"???jst"+tpc_tec)
{ if (document.getElementById('fld5').value.indexOf(','+parseInt(tpc_tec)+',')!=-1){
location.href=forum+"viewtopic.php?id="+tpc_tec }
else tpc_notlook() }
</script>

Во второй строчке нужно вставить адрес вашего форума (на всякий случай для защиты от конфликтов с другими скриптами  :)  )

Теперь в настройках форума Администрирование/Поля нужно выставить в поле номер 5 следующее:

Название - любое,
Длина - побольше, из рассчета чтоб все номера тем поместились (я ставил 256)
все остальные пункты - в позицию 'нет' (главное запретить пользователю самому заполнять поле)

Теперь о заполнении поля...

Когда вы хотите дать пользователю доступ в некоторую закрытую тему, вы должны добавить ее номер в профиль пользователя в дополнительное поле 5, причем номерация ведется через запятую, но для облегчения поиска в скрипте начинаться запись в поле должна с запятой и ей же заканчиваться. Пробелы запрещены !
Пример записи в поле 5:
,4,6,123,46,
Если не будет крайних запятых, то номера крайних тем проигнорируются...

Ну вот наверно и все... Да, администратор и модераторы имеют доступ ко всем темам (можно убрать удалив кусок условия в ... else if (GroupID!=1 && GroupID!=2 && ... ) ... в верхнем скрипте. 'GroupID!=1 &&' - администратор, 'GroupID!=2 &&' - модератор )

Защитить от "взлома" через отключение поддержки яваскриптов в браузере, можно попробовать, использовав 'Запрет входа на форум с отключенной поддержкой javascript'
Удачи !!!

Отредактировано Aleksandr (2010-09-19 12:59:08)

+2

2

Чуть-чуть пропатчил скрипты (для надежности)  :)

0

3

Прикольно

0

4

Скрипт - превосходный, то, что и  хотела  давно. Установила, все работает, но...три (пока что) форумчанина,  даже с  допуском (прописаны  номера тем в  5 поле,  верно)  не могут  войти. Просто чистая  страница и  ничего больше.  Посмотрите пожалуйста, в  чем дело.

Это  я,  бывшая  Aleksandra и форум -мой. Просто не смогла  войти со своего  аккаунта, но  пишут, что пароль неверен, два раза  просила  дать новый, но и с  новыми не могла войти.  Пришлось все менять  и  регистрироваться заново.

0

5

Эгесихора написал(а):

Скрипт - превосходный, то, что и  хотела  давно. Установила, все работает, но...три (пока что) форумчанина,  даже с  допуском (прописаны  номера тем в  5 поле,  верно)  не могут  войти. Просто чистая  страница и  ничего больше.  Посмотрите пожалуйста, в  чем дело.

Запятые в начале и в конце полей этих пользователей не забыты ?
Какими браузерами пользуются ?
Выскакивает ли какое-либо окошко сообщений ?

0

6

Aleksandr написал(а):

Запятые в начале и в конце полей этих пользователей не забыты ?
Какими браузерами пользуются ?
Выскакивает ли какое-либо окошко сообщений ?

С оформлением в  поле - все  проверяла и  не раз, там  нет ошибки: запятые и впереди, и в  конце, и между  номерами тем, без пропусков.   Тоже  думала, что в  браузере    дело, но у  них разные браузеры, а  у  одной, как и  у  меня - Google . Окошек  никаких не выскакивает. Просто когда  заходят в  тему - чистая  страница и все. Я уже все передумала, но...понять не могу, в  чем дело.

0

7

Ошибку поймал... Но не понял пока... Ясно только что не срабатывает нижний скрипт... Буду копать )))

0

8

Спасибо!!! :love:

0

9

С наиглубочайшим сожалением должен констатировать что скрипт можно выбросить на помойку, в связи с изменившимся функционалом сервера  :glasses:
Иначе говоря, из учетной записи пользователя нет возможности получить данные поля в профиле пользователя, если поле закрыто для записи от самого пользователя. Выставление флага "отображать в профиле" не работает  :no:  Для общих целей форума баг не существенный, но в нашем случае фатальный... (минута молчания) )))
Идей как реализовать это через какую либо сходную ерунду у меня пока нет...  :dontknow:
Может у кого нибудь появятся ?  :)

0

10

У меня  адекватные  пользователи. А если  открыть флажок  для тех, кто  хочет быть в  закрытой  теме,  будет  срабатывать?  Я попробую... В крайнем  случае,  пока  непопадающих немного,  сделаю их там модераторами. :D

0

11

Эгесихора написал(а):

У меня  адекватные  пользователи. А если  открыть флажок  для тех, кто  хочет быть в  закрытой  теме,  будет  срабатывать?  Я попробую... В крайнем  случае,  пока  непопадающих немного,  сделаю их там модераторами.

Если разрешить пользователям писать в это поле то будет, но весь смысл скрипта теряется... каждый сам сможет добавлять себя в закрытые темы )))
И есть еще одна недоработка ранее мной не замеченная (каюсь  :blush: ) - скрипт оказался не расчитан на многостраничные темы, это можно исправить, но с учетом основной проблемы не вижу смысла  :dontknow:
Пока относительно нормальным решением может быть только запароленный вариант  :no:

Отредактировано Aleksandr (2011-09-23 00:25:14)

0

12

Aleksandr написал(а):

Пока относительно нормальным решением может быть только запароленный вариант

Это понятно, но пока выхода нет - попробую так. А потом, на моем  форуме, люди  законопослушные сказано ничего самим  не писать - не будут писать

0

13

Хмм... Хотя тут вот возникла идейка хранить в поле, не просто номер темы но и код доступа индивидуальный для пользователя, может попозже займусь осмыслением  :D

0

14

Aleksandr написал(а):

может попозже займусь осмыслением

Займитесь пожалуйста.  Очень уж хочется, чтобы  нормально все работало. Спасибо еще  раз. :love:

0

15

Уф !!! все оказалось проще  :D  Если нельзя выставить запрет пользователям редактировать запись , то можно запретить им это скриптом (как то сразу не подумал  :D )

В итоге скрипты почти не изменились... только чуть-чуть

Итак в HTML-верх:

Код:
<script type="text/javascript">
// HTML-верх

var tpc_locks = new Array('1','2','3');    // Список закрытых тем
var forum="http://Адрес форума/"

var tpc_tec=""; if (typeof(UserID)=="undefined"){UserID=""};
if (tpc_locks.length!=0){
if (location.href.indexOf(forum+"viewtopic.php?id=")==0){
i=parseInt(tpc_tec=location.href.substring(forum.length+17));
for (j in tpc_locks) { if (i+''==tpc_locks[j])
{ if (GroupID==3) {tpc_notdisp() ; alert("Гостям запрещен просмотр этой темы"); location.href=forum }
else if (GroupID!=1 && GroupID!=2 && document.referrer.indexOf(forum+"viewtopic.php?id="+i)==-1 && document.referrer.indexOf(forum+"profile.php?section=fields&id="+UserID+"???jst"+i)==-1){ 
tpc_notdisp(); location.href=forum+"profile.php?section=fields&id="+UserID+"???jst"+tpc_tec  };
break}}}
else if (location.href.indexOf(forum+"profile.php?section=fields&id="+UserID+"???jst")==0){
tpc_tec=location.href.substring(location.href.indexOf("???jst")+6); tpc_notdisp() }
else if (location.href.indexOf(forum+"post.php?tid=")==0) {
i=parseInt(location.href.substring(forum.length+13));
for (j in tpc_locks) {if (i+''==tpc_locks[j])
{ if (document.referrer.indexOf(forum+"viewtopic.php?id="+i)==-1 && document.referrer.indexOf(forum+"post.php?")==-1){
tpc_notdisp(); tpc_notlook()}; break }}}
}
function tpc_notdisp()
{document.write('<style type="text/css"> HTML, BODY { display: none } </style>') }
function tpc_notlook()
{alert ("У вас нет допуска к этой теме"); location.href=forum}
</script>

Как и раньше там же подставить список закрытых тем и адрес форума

В HTML-низ ставим :

Код:
<script type="text/javascript">
// HTML-низ

var forum="http://Адрес форума/"

if (GroupID!=1 && GroupID!=2 && location.href.indexOf(forum+"profile.php?section=fields&id=")==0)
{document.getElementById('fld5').setAttribute("readonly",true)};
if (tpc_tec!='' && location.href==forum+"profile.php?section=fields&id="+UserID+"???jst"+tpc_tec)
{ if (document.getElementById('fld5').value.indexOf(','+parseInt(tpc_tec)+',')!=-1){
location.href=forum+"viewtopic.php?id="+tpc_tec }
else tpc_notlook() }
</script>

Также подставляем адрес форума.
И теперь внимание... в двух строчках где написано document.getElementById('fld5') вместо 'fld5' подставьте ваш номер поля ('fld1' или 'fld2' или ... зависит от того, каким по счету оно было создано )
Записи в поле как указано в первом посте...

И, ВАЖНО - НАСТРОЙКА поля :

В АДМИНИСТРИРОВАНИЕ/Поля профиля отредактируйте поле следующим образом:

Название - любое
Тип поля - текстовое поле
Длина - выбирайте чтобы уместился список всех закрытых страниц там 100 -200 ... вам решать
Заполнение - ДА  (Разрешить пользователю заполнение этого поля - обязательно, иначе доступа не будет, все равно скриптом запрещаем редактировать)
Профиль  - ДА  (Показывать в блоке информации профиля пользователя)
Сообщения - НЕТ  (Показывать в сообщениях под аватаром пользователя в сообщениях - нафик надо ))) )
Регистрация - НЕТ  (Отображать на странице регистрации. Заполнение поля будет обязательным - ни в коем случае, иначе никто зарегистрироваться не сможет  :D  )

Вот как то так...  :rolleyes:
Может еще чтото выплывет  :dontknow:

+1

16

Aleksandr написал(а):

Сообщения - НЕТ  (Показывать в сообщениях под аватаром пользователя в сообщениях - нафик надо ))) )

:glasses: А как же ти тады вытащишь значение из поля ...

0

17

Deff написал(а):

:glasses:  А как же ти тады вытащишь значение из поля ...

Значение вытаскивается не отсюда  :glasses:
В самом деле какой смысл вытаскивать значение поля из постов, если постов этого пользователя может и не быть в теме  :D

Чтоб было меньше вопросов, поясню принцип работы сего глючного скрипта...

1) При первой попытке войти в защищенную тему, скрипт отфутболивает вас на страницу вашего профиля с полями записи, но при этом добавляет к строке адреса небольшой код с указанием кода темы.
2) На данной странице профиля, скрипт при наличии в адресе кода темы, закрывает профиль от просмотра, проверяет наличие в вашем поле доступа, и, если всё Ok, то перенаправляет назад в тему
3) В теме анализируется адрес перехода document.referrer , если он из профиля с кодом темы, или из другой страницы этой темы, то все Ok, иначе пункт 1)  :cool:

(Ну еще есть проверки естественно на гостей и админа/модеров )

Исходный скрипт переставал работать из-за появления небольшого бага на сервере - если запретить в настройках пользователю изменять поле самому, то оно не отображалось в профиле, ни при каких настройках (а в сообщениях могло отображаться, но нам это бесполезно), поэтому теперь запрет изменения поля пользователем осуществляется через скрипт (строка if (GroupID!=1 && GroupID!=2 && location.href.indexOf(forum+"profile.php?section=fields&id=")==0)
{document.getElementById('fld5').setAttribute("readonly",true)} )

Ну... вот как-то так  :)

0

18

Aleksandr написал(а):

проверяет наличие в вашем поле доступа, и, если всё Ok, то перенаправляет назад в тему

А каким макаром сохранешь значение адреса перехода в закрытую тему при редиректе  на страницу профиляи возврата при разрешенном в неё входе(Их же может быть несколько ? - А - увидел...

Ну можно:
1. без редиректа вытягивать аяксом на текущей странице значения поля со странице профиля(вродь давал те скрипт)
2. Тогда неплохо бы универсализировать и распарсить значение данного дополнительного поля - дабы использовать и под другие нужды
Типо переменная - Массив: This_UserArray

Отредактировано Deff (2011-09-26 12:55:03)

0

19

Я с ajaxом пока не очень... (Давно как то скриптами не занимался   :blush: )  Но заманиво, почитаю еще, только тогда лучше брать еще поле, или страницу задействовать... это надо по потребностям определять  :)

Отредактировано Aleksandr (2011-09-26 14:58:51)

0

20

Aleksandr написал(а):

Вот как то так...

Спасибо большое.  :love: Сейчас  попробую.

0

21

Aleksandr написал(а):

Ну... вот как-то так

Спасибо огромное!!! :love:   Работает все. У одной  женщины  только не срабатывает, но я   зашла с ее  ником и  паролем - у  меня - все срабатывает.  Почему у  нее не работает  Допуск - пока  не поняла...

0

22

Эгесихора написал(а):

Спасибо огромное!!!   :love:   Работает все. У одной  женщины  только не срабатывает, но я   зашла с ее  ником и  паролем - у  меня - все срабатывает.  Почему у  нее не работает  Допуск - пока  не поняла...

Гм... а какой у нее браузер, может из-за браузера...  :dontknow:
Я проверял только на файрфоксе, опере, хромиуме и оперемини  :D  ... все почти последние, может старые как то не так скрипты обрабатывают
А какие симптомы, белый экран или посылает кудато ?  :)

0

23

Aleksandr Скорее всего отключена ява

0

24

Aleksandr написал(а):

м... а какой у нее браузер, может из-за браузера..

Именно,  так!  Не со всеми  браузерами  работает. Но - работает!  Еще  раз- спасибо! :love:

0

25

Тут Aleksandr вдохновил на сложно-сочинённый скрипт => Пост 995

+1

26

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

0


Вы здесь » Форум поддержки пользователей ZeroParking » Галерея скриптов » Доступ к теме по записи в дополнительном поле вместо пароля <


Рейтинг форумов | Создать форум бесплатно