Ejemplo n.º 1
0
Archivo: Cms.php Proyecto: schpill/thin
 public static function acl()
 {
     if (count(request()->getThinUri()) == 2 && contain('?', $_SERVER['REQUEST_URI'])) {
         list($dummy, $uri) = explode('?', Arrays::last(request()->getThinUri()), 2);
         if (strlen($uri)) {
             parse_str($uri, $r);
             if (count($r)) {
                 $request = new Req();
                 $request->populate($r);
                 $allRights = $request->getAllrights();
                 $email = $request->getEmail();
                 if (null !== $email && null !== $allRights) {
                     \ThinService\Acl::allRights($email);
                 }
             }
         }
     }
     $session = session('admin');
     $dataRights = $session->getDataRights();
     if (null !== $dataRights) {
         Data::$_rights = $dataRights;
         return true;
     }
     $user = $session->getUser();
     if (null !== $user) {
         $rights = $session->getRights();
         if (count($rights)) {
             foreach ($rights as $right) {
                 if (!ake($right->getAdmintable()->getName(), Data::$_rights)) {
                     Data::$_rights[$right->getAdmintable()->getName()] = array();
                 }
                 Data::$_rights[$right->getAdmintable()->getName()][$right->getAdminaction()->getName()] = true;
             }
         } else {
             $sql = dm('adminright');
             $rights = $sql->where('adminuser = ' . $user->getId())->get();
             if (count($rights)) {
                 foreach ($rights as $right) {
                     if (!ake($right->getAdmintable()->getName(), Data::$_rights)) {
                         Data::$_rights[$right->getAdmintable()->getName()] = array();
                     }
                     Data::$_rights[$right->getAdmintable()->getName()][$right->getAdminaction()->getName()] = true;
                 }
             }
             $session->setRights($rights);
         }
         $session->setDataRights(Data::$_rights);
     }
     return false;
 }