]> wagner.pp.ru Git - oss/stilllife.git/commitdiff
Дописал проверку прав ползователя. Работоспособность не проверял.
authorsafir <safir>
Tue, 25 Mar 2008 12:06:36 +0000 (12:06 +0000)
committersafir <safir>
Tue, 25 Mar 2008 12:06:36 +0000 (12:06 +0000)
templates/basicset/page.js

index 9dc4c99cb65f85eae12400d4fb5232f57f769952..d4fad44c1071be3d76b7c7937f84dc7486f38f76 100644 (file)
@@ -61,14 +61,41 @@ function showUser(username) {
                }               
        }       
 }
+
 //
 // Добывает с сервера информацию о модераторах данного форума и
 // возвращает user, moderator или admin в зависисмости от статуса
 // указанного пользователя.  
 //
 function getUserRights(user) {
-
+    status="user";
+    var xhr=getXMLHttpRequest();
+    if(!xhr) return status;
+    
+    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");
+    for(var path="",i=0;i<depth;path+="../",i++) {
+       xhr.open(GET, path+"perms.txt",false);
+       xhr.send("");
+       if(xhr.status!=200) continue;
+       
+       var perms=("\n"+xhr.responsText+"\n").match(re);
+       if(perms!=null) {
+           if(perms[1]=="banned") return "banned";
+           if(perms[1]=="admins") return "admin";
+           status=="moderator";
+       }
+       
+       xhr.open(GET, path+".forum",false);
+       xhr.send("");
+       if(xhr.status==403) break;
+    }
+    
+    return "user";
 }
+
 // Обработчик body onLoad
 //  Пробегается по странице и прячет все элементы
 // управления, которые не разрешены данному пользователю
@@ -117,3 +144,24 @@ function showForm(link, formName) {
    // позиционируем форму под текущей ссылкой.
    return false;       
 }
+
+/**
+* Создаёт объект XMLHttpRequest, предварительно уничтожая существующий,
+* если такой существует.
+*/
+function getXMLHttpRequest()
+{
+    try {
+        return xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
+    } catch (e) {
+        try {
+            return new ActiveXObject("Microsoft.XMLHTTP");
+        } catch (E) {
+           if (typeof XMLHttpRequest!='undefined')
+               return new XMLHttpRequest();
+        }
+    }
+
+    return false;
+}
+