我有一个添加待办事项的函数:
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>但是因为我想限制一个普通用户来添加一个待办事项,所以这里有一个限制函数:
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();,以使该字符串不可见,但仍可见。我该怎么办?提前感谢
发布于 2015-01-06 20:06:07
这是因为您在restrict()函数中调用exit(),该函数的作用域以函数作用域结束。
返回行数,而不是在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>";
}
}发布于 2015-01-06 20:06:22
请在下面尝试,应该可以。
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;
}
}https://stackoverflow.com/questions/27798260
复制相似问题