在PHP中设置权限
我有一个名为admin_permissions的表,其中包含以下列: 序列 页面名称 级别用户 高级行政人员 二级支援 二级账户 最后4列是不同的级别 我有检查权限的代码:在PHP中设置权限,php,mysql,sql,Php,Mysql,Sql,我有一个名为admin_permissions的表,其中包含以下列: 序列 页面名称 级别用户 高级行政人员 二级支援 二级账户 最后4列是不同的级别 我有检查权限的代码: $permission_sql="SELECT * from admin_permissions where page_name = '".$_SERVER["REQUEST_URI"]."' "; $permission_rs=mysql_query($permission_sql,$conn); if(mysql_num
$permission_sql="SELECT * from admin_permissions where page_name = '".$_SERVER["REQUEST_URI"]."' ";
$permission_rs=mysql_query($permission_sql,$conn);
if(mysql_num_rows($permission_rs) == 0)
{
echo '<h2 align="center">An Error has occurred!</h2>';
exit();
}
else
{
$permission_result=mysql_fetch_array($permission_rs);
if($usertype_user != $permission_result["level_user"] or
$usertype_support != $permission_result["level_support"] or
$usertype_admin != $permission_result["level_admin"] or
$usertype_accounts != $permission_result["level_accounts"])
{
echo '<h2 align="center">Access Denied</h2>';
echo '<h2 align="center">Please contact your administrator quoting \'Permission Error\' and number \''.$permission_result["sequence"].'\'</h2>';
exit();
}
else
{
}
}
$usertype\ux文件。。。等于或“是”,数据库结果等于或“是”
我登录的用户的$permission_result[level_admin]等于yes,所以上面的if语句应该是false,但不是,它说的是true
如何使上述代码正常工作
*另外,我不担心在这个特定代码上的SQL注入请删除“或”try with | | |,用于检查或条件使用符号| |,用于检查和条件使用&&
$permission_sql="SELECT * from admin_permissions where page_name = '".$_SERVER["REQUEST_URI"]."' ";
$permission_rs=mysql_query($permission_sql,$conn);
if(mysql_num_rows($permission_rs) == 0)
{
echo '<h2 align="center">An Error has occurred!</h2>';
exit();
}
else
{
$permission_result=mysql_fetch_array($permission_rs);
if(($usertype_user != $permission_result["level_user"]) ||
($usertype_support != $permission_result["level_support"])||
($usertype_admin != $permission_result["level_admin"])||
($usertype_accounts != $permission_result["level_accounts"]))
{
echo '<h2 align="center">Access Denied</h2>';
echo '<h2 align="center">Please contact your administrator quoting \'Permission Error\' and number \''.$permission_result["sequence"].'\'</h2>';
exit();
}
else
{
}
}
此声明
if($usertype_user != $permission_result["level_user"] or
$usertype_support != $permission_result["level_support"] or
$usertype_admin != $permission_result["level_admin"] or
$usertype_accounts != $permission_result["level_accounts"])
如果这些权限中至少有一个不匹配,则为true;只有当所有这些权限都匹配时,该值才为false。在您的情况下,至少有一个user、support、admin、accounts与level_user、level_support、level_admin、level_accounts不匹配,请检查:您可能有admin match yes==yes或==,但您可能缺少其他内容
你可能想要这样的东西:
if(
($permission_result["level_user"] and $usertype_user!='yes') or
($permission_result["level_support"] and $usertype_support!='yes') or
($permission_result["level_admin"] and $usertype_admin!='yes') or
($permission_result["level_account"] and $usertype_accounts!='yes')
)
注释
看看php:如果您有,而不是某处,那么它的计算结果为true
或与| |或与&&之间的区别仅在优先级上,请参见,在本例中并不重要
我不确定$\u服务器[REQUEST\u URI]是否必须进行url编码;可以肯定的是,你可以在上面使用mysql\u real\u escape\u字符串——或者更好,因为评论抱怨mysql的不推荐、mysqli\u real\u escape\u字符串——或者,如果你不使用一些特殊的字符集,只使用addslashes。@cHao不幸的是,很多PHP教程仍然使用mysql\u*教授Python+mysql编程。如果有人写了一篇使用PDO或MySQLi的文章,我会非常高兴,但我还不知道有没有。PHP.net已经为Timothy写了很多文章。一是轻描淡写。还有什么比这更容易解释的呢?我试着用| | for“or”,但是这个语句仍然返回true,即使它应该是false。当我不应该看到我的数据库时,我收到了一个错误--我登录的用户有level_user=/level_admin=/level_support=/level_accounts=所以他们根本不应该访问这个页面,但是他们尝试var_dump$permission\u result,$usertype_user,$usertype_support,$usertype\u admin,$usertype_账户;,检查这些值并告诉我是否存在违反逻辑的情况