У меня есть эта функция добавления элемента todo:
function add() {
//Access control
$session=new Auth();
$session->start();
$access=new Access();
$role=$_SESSION['userinfo']['role'];
$action=2;
$access->restrict($role,$action);
$todo = $_POST['todo'];
$this->set('title','Success - My Todo List App');
$this->set('todo',$this->Item->query('insert into items (item_name) values (\''.mysql_real_escape_string($todo).'\')'));
}
И обычно добавить страницу, которая говорит, что todo успешно добавлен, выглядит так:
<a class="big" href="../items/viewall">Todo successfully added. Click here to go back.</a>
Но поскольку я хочу ограничить доступ обычного пользователя для добавления элемента todo, здесь есть функция limit:
function restrict($role,$action){
$sql=mysql_query("SELECT * FROM permissions WHERE role_id='$role' AND action_id='$action'");
$count=mysql_num_rows($sql);
if($count>0){
echo "<div class='warning_positive'>Access Granted</div>";
}
else{
echo "<div class='warning_negative'>Access Denied</div>";
exit();
}
}
Чтобы запретить доступ, он показывает, что доступ запрещен, и не добавляет этот элемент todo. Но все же это показывает, что Todo успешно добавлен. Как видите, я поставил этот выход (); сделать эту строку невидимой, но все же ее увидеть. Что я должен делать? заранее спасибо
Это потому, что вы вызываете exit () внутри функции restrict (), область действия которой заканчивается областью действия функции.
Вместо того, чтобы показывать ошибку в функции restrict (), возвращает количество строк.
В зависимости от возвращенного количества либо предоставьте доступ, либо просто отобразите сообщение об ошибке.
Такой подход уменьшит количество строк кода.
Исправленный код:
function restrict($role,$action){
$sql=mysql_query("SELECT * FROM permissions WHERE role_id='$role' AND action_id='$action'");
$count=mysql_num_rows($sql);
return $count;
}
function add() {
//Access control
$session=new Auth();
$session->start();
$access=new Access();
$role=$_SESSION['userinfo']['role'];
$action=2;
$access = $access->restrict($role,$action);
if ($access > 0) {
echo "<div class='warning_positive'>Access Granted</div>";
$todo = $_POST['todo'];
$this->set('title','Success - My Todo List App');
$this->set('todo',$this->Item->query('insert into items (item_name) values (\''.mysql_real_escape_string($todo).'\')'));
}
else {
echo "<div class='warning_negative'>Access Denied</div>";
}
}
Попробуй ниже, должно сработать.
function add() {
//Access control
$session=new Auth();
$session->start();
$access=new Access();
$role=$_SESSION['userinfo']['role'];
$action=2;
if($access->restrict($role,$action)){
echo "<div class='warning_positive'>Access Granted</div>";
}else{
echo "<div class='warning_negative'>Access Denied</div>";
exit();
}
$todo = $_POST['todo'];
$this->set('title','Success - My Todo List App');
$this->set('todo',$this->Item->query('insert into items (item_name) values (\''.mysql_real_escape_string($todo).'\')'));
}function restrict($role,$action){
$sql=mysql_query("SELECT * FROM permissions WHERE role_id='$role' AND action_id='$action'");
$count=mysql_num_rows($sql);
if($count>0){
return true;
}
else{
return false;
}
}