2015-10-26 3 views
2

Я пытаюсь проверить уровни разрешений, но единственная работающая функция - auth.perm_one, когда perm_two, perm_three и т. Д. Идентичны .. У пользователя есть уровень разрешений 10 в базе данных.Проблемы с Twig и функциями

Я разместил все соответствующие коды ниже.

Middleware Файл:

<?php 

namespace BSA\Middleware; 

use Slim\Middleware; 

class BeforeMiddleware extends Middleware 
{ 
    public function call() 
    { 
     $this->app->hook('slim.before', [$this, 'run']); 

     $this->next->call(); 
    } 

    public function run() 
    { 
     if (isset($_SESSION[$this->app->config->get('auth.session')])){ 
      $this->app->auth = $this->app->user->where('id', $_SESSION[$this->app->config->get('auth.session')])->first(); 
     } 

     $this->app->view()->appendData([ 
      'auth' => $this->app->auth, 
      'baseUrl' => $this->app->config->get('app.url') 
     ]); 
    } 
} 

Файл пользователя:

<?php 

namespace BSA\User; 

use Illuminate\Database\Eloquent\Model as Eloquent; 

class User extends Eloquent 
{ 
    protected $table = 'users'; 

    protected $fillable = [ 
     'email', 
     'username', 
     'password', 
     'perm_level', 
     'active', 
     'active_hash', 
     'remember_identifier', 
     'remember_token', 
    ]; 

    public function getFullName() 
    { 
     if (!$this->first_name || !$this->last_name) { 
      return null; 
     } 

     return "{$this->first_name} {$this->last_name}"; 
    } 

    public function getFirstName() 
    { 
     if (!$this->first_name) { 
      return null; 
     } 

     return "{$this->first_name}"; 
    } 

    public function getLastName() 
    { 
     if (!$this->last_name) { 
      return null; 
     } 

     return "{$this->last_name}"; 
    } 

    public function getFullNameOrUsername() 
    { 
     return $this->getFullName() ?: $this->username; 
    } 

    public function getFirstNameOrUsername() 
    { 
     return $this->getFirstName() ?: $this->username; 
    } 

    public function activateAccount() 
    { 
     $this->update([ 
      'active' => true, 
      'active_hash' => null 
     ]); 
    } 

    public function hasPermission($permission) 
    { 

     $permission = $permission - 1; 

     return (bool) $this->perm_level > $permission; 

    } 

    public function perm_one() 
    { 
     return $this->hasPermission(1); 
    } 

    public function perm_two() 
    { 
     return $this->hasPermission(2); 
    } 

    public function perm_three() 
    { 
     return $this->hasPermission(3); 
    } 

    public function perm_four() 
    { 
     return $this->hasPermission(4); 
    } 

    public function perm_five() 
    { 
     return $this->hasPermission(5); 
    } 

    public function perm_six() 
    { 
     return $this->hasPermission(6); 
    } 

    public function perm_seven() 
    { 
     return $this->hasPermission(7); 
    } 

    public function perm_eight() 
    { 
     return $this->hasPermission(8); 
    } 

    public function perm_nine() 
    { 
     return $this->hasPermission(9); 
    } 

    public function perm_ten() 
    { 
     return $this->hasPermission(10); 
    } 

} 

Где я пытаюсь осуществить это:

<aside class="sidebar"> 

    {% if auth %} 
     <article> 
      <h2>Hello, {{ auth.getFirstNameOrUsername }}!</h2> 

      <h2><a href="{{ urlFor('logout') }}">Logout</a></h2> 
     </article> 
    {% else %} 
     <article> 
      <h2>Welcome!</h2> 
      <div class="registerorlogin"><h2><a href="{{ urlFor('register') }}">Register</a></h2> 
      <h3 class="center">or</h3> 
      <h2><a href="{{ urlFor('login') }}">Login</a></h2></div> 
     </article> 
    {% endif %} 

    {% if auth.perm_one %} 
     <article> 
      <h2>Test</h2> 

     </article> 
    {% endif %} 

    {% if auth.perm_two %} 
    <h2>TEST 2</h2> 
    {% endif %} 


</aside> 
+1

Какой уровень влажности у пользователя есть в базе данных, в которую вы входите? –

+0

Пользователь имеет уровень 10 в базе данных, поэтому он должен иметь доступ к информации. –

+1

Вы уверены, что оба уровня разрешений являются целыми, это моя первоначальная мысль о том, что происходит не так, или по крайней мере предоставлять информацию об отладке вокруг этих двух значений :) –

ответ

1

Я понял это. Вот новый код для затронутой функции:

public function hasPermission($permission) 
{ 

    $perm_level = intval($this->perm_level); 
    $permission = $permission - 1; 

    if ($perm_level > $permission) {return true;} else {return false;} 

} 
Смежные вопросы