2015-01-06 2 views
0

Я хочу сделать страницу, и на этой странице можно открыть только одного пользователя. Я хочу сделать что-то вроде этого: если user id = 1, то его открытие еще раз забрасывает ошибку.Только один пользователь может открыть файл admin.ctp

Я уже попытался это:

if (in_array($this->action, array('controller' => 'users', 'action' => 'admin'))) { 
     $postId = (int) $this->request->params['pass'][0]; 
     if ($this->User->isOwnedBy($postId, $users['id'] = 1)) { 

      return true; 
     }else{echo "You are not admin!";} 

    } 

Тогда я thinked, может быть, это немного легче?

public function admin($id = null) { 

      $this->User->id = $id; 
       if ($id == 1) { 
        echo 'You are admin'; 
       } 
       else { 
        throw new NotFoundException(__('You are not admin !')); 
       } 
     } 

Но его не работает, Как я получу этот идентификатор пользователя, если. Это второе решение бросить только эту ошибку, но я не хочу, я хочу доступ, если идентификатор пользователя 1.

Здесь пользователи картина

enter image description here

Спасибо за любую подсказку или решения.

+0

Какую ошибку вы получаете соответствующий идентификатор с данными сессии?. вы используете компонент auth? –

+0

Я получаю эту ошибку: 'else {throw new NotFoundException (__ ('Вы не админ!'));}' – frantsium

+0

вы используете компонент auth для входа? –

ответ

2

Попробуйте this-

public function admin($id = null) { 
    $currentUserId = $this->Auth->user(id); 
    //$isAdmin  = $this->User->hasAny(
     //array('User.id' => $currentUserId) 
    //); 
    //if ($isAdmin) { 
    if ($currentUserId == 1) 
     echo 'You are admin'; 
    } else { 
     throw new NotFoundException(__('You are not admin !')); 
    } 
} 

Для зарегистрированных пользователей.

+0

Мне нужно для пользователя с id 1, atm, все зарегистрированные пользователи могут открыть этот файл, но я этого не хочу. – frantsium

+0

Ох ... забыл, что ... ответ. –

+0

Ничего, его работа, но получить одно уведомление: 'Уведомление (8): Использование неопределенного константы id - предполагаемый 'id' [APP \ Controller \ UsersController.php, строка 88]' – frantsium

-1

, так что вы хотите проверить, является ли идентификатор пользователя 1 ??

//Fetch the user informations from database and stock it into $user 

if(is_admin($user[id])){ 
    echo 'You are admin'; 
} 
else{ 
    echo 'You are not admin'; 
} 

function is_admin($id = NULL){ 
    if($id == 1){ 
     return true; 
    } 
    else{ 
     return false; 
    } 
} 

скажите мне, если я неправильно понял

Edit: Согласно нашей беседы, попробуйте следующее:

//Fetch the ID of the user and stock it in $user_id 

if($user_id == 1){ 
    echo 'You are admin'; 
} 
else{ 
    echo 'You are not admin'; 
} 
+0

И как вы получаете '$ user'? –

+0

, извлекая его из базы данных. Я не рассказываю об этом, потому что это не предмет. Он хочет знать, как проверить, является ли пользователь администратором, а не как получать данные из базы данных ... imo ... – Roshyo

+0

Не работает, получив ошибку: 'Ошибка: вызов неопределенной функции is_admin()' – frantsium

0

Рекомендуемый подход для получения авторизовались пользовательских данных с помощью самого AuthComponent:

// in any controller 
$userId = $this->Auth->user('id'); 

См. Accessing the logged in user Доступ к зарегистрированному i n в разделе Auth раздела CakePHP Book.

+0

Да, у меня есть это, если пользователь вошел в систему, тогда он может открыть это. Но я хочу, только пользователь с id 1 может открыть это – frantsium

0

лучший вариант: -

использование Идентификатор роли для администраторов, это поможет вам для нескольких администраторов. и дать отрицательный идентификатор администратор: - нравится добавить role_id столбец в таблице пользователей и дает значение -1

public function admin($id = null) { 
    $role = $this->Session->read('Auth.User.role_id'); 
    if ($role < 0) 
     echo 'You are admin'; 
    } else { 
     throw new NotFoundException(__('You are not admin !')); 
    } 
} 
Смежные вопросы