From: safir Date: Thu, 8 May 2008 05:11:02 +0000 (+0000) Subject: Добавил замену "." в имени пользователя на "\.", поскольку, попадая в регулярное... X-Git-Url: http://www.wagner.pp.ru/gitweb/?p=oss%2Fstilllife.git;a=commitdiff_plain;h=7b8c6e94eb769b0fe9f8ed52f0c35a9937f9f402 Добавил замену "." в имени пользователя на "\.", поскольку, попадая в регулярное выражение, "." начинает соответствовать любому символу, что нарушает однозначность нахождения имён. Вставил коментарии в код функции, поскольку с трудом разобрался в этой куче регулярных выражений. --- diff --git a/templates/basicset/page.js b/templates/basicset/page.js index ec6ed9c..ed9e677 100644 --- a/templates/basicset/page.js +++ b/templates/basicset/page.js @@ -83,31 +83,72 @@ function getUserRights(user) { var status="user"; var xhr=getXMLHttpRequest(); if(!xhr) return status; - // Strip http:// prefix from OpenID url - if (user.substring(0,7) == "http://") { - user=user.substring(7,user.length); - } + + // Strip http:// prefix from OpenID url + if (user.substring(0,7) == "http://") + user=user.substring(7,user.length); + + /* + * Определяем, на какую глубину относительно корня сайта "закопана" ткущая + * страница. Нужно для рекусивного опроса структуры форума на предмет прав + * пользователя. + */ var hr=location.href.match(/^\w+:\/\/[^/]*\/([^?#]+)/); if(hr==null) return status; var depth=hr[1].split(/\//).length; - var re=new RegExp("\n\\\[\s*(admins|moderators|banned)\s*\\\]\s*[^[]*\n"+user+"\n","m"); + + /* + * Заменяем в имени (OpenID) пользователя "." на "\.", поскольку строка + * попадает в RegExp и наличие "." приведёт к тому, что функция не сможет + * различить "ab.cd", "ab-cd" и "abecd". + */ + var normalizedUser=user.replace(/\./,"\\."); + + /* + * С помощью регулярного выражения ищем имя мользователя и предшествующий ему + * заголовок раздела, определяющий уровень прав. + */ + var re=new RegExp("\n\\\[\s*(admins|moderators|banned)\s*\\\]\s*[^[]*\n"+normalizedUser+"\n","m"); for(var path="",i=0;i