Backport
[platal.git] / classes / platal.php
index 5716199..e72fc0b 100644 (file)
@@ -125,7 +125,7 @@ class Platal
         return null;
     }
 
-    protected function near_hook()
+    public function near_hook()
     {
         $hooks = array();
         foreach ($this->__hooks as $hook=>$handler) {
@@ -175,6 +175,15 @@ class Platal
         return null;
     }
 
+    protected function check_perms($perms)
+    {
+        if (!$perms) { // No perms, no check
+            return true;
+        }
+        $s_perms = S::v('perms');
+        return $s_perms->hasFlagCombination($perms);
+    }
+
     private function call_hook(PlatalPage &$page)
     {
         $hook = $this->find_hook();
@@ -196,8 +205,7 @@ class Platal
                 return PL_FORBIDDEN;
             }
         }
-
-        if (!empty($hook['perms']) && $hook['perms'] != S::v('perms')) {
+        if ($hook['auth'] != AUTH_PUBLIC && !$this->check_perms($hook['perms'])) {
             return PL_FORBIDDEN;
         }
 
@@ -213,7 +221,7 @@ class Platal
         return $val;
     }
 
-    protected function force_login(PlatalPage &$page)
+    public function force_login(PlatalPage &$page)
     {
         if (S::logged()) {
             $page->changeTpl('core/password_prompt_logged.tpl');