将角色分配给我的PHP会话?

时间:2016-03-16 21:21:08

标签: php

目前,我有一个PHP脚本,用于检查用户是否已登录。如果是,则加载页面。如果他们不是,则重定向到登录页面。我已经实现了这一点,但现在,我想只允许具有特定角色的用户能够查看该页面,而不仅仅是登录。在 phpro_auth中的 phpro_users 表中数据库,我添加了一个名为" role"的附加列。我想要分配的用户,例如," admin"能够查看页面。总之,我正在尝试修改我的脚本,该脚本当前检查用户是否已登录,以检查角色。我怎样才能做到这一点?我的脚本如下:

<?php

/*** begin the session ***/
session_start();

if(!isset($_SESSION['user_id']))
{
    $message = header("Location: http://localhost/correspondence/prologin/index.php");
}
else
{
    try
    {
        /*** connect to database ***/
        /*** mysql hostname ***/
        $mysql_hostname = 'localhost';

        /*** mysql username ***/
        $mysql_username = 'root';

        /*** mysql password ***/
        $mysql_password = '';

        /*** database name ***/
        $mysql_dbname = 'phpro_auth';


        /*** select the users name from the database ***/
        $dbh = new PDO("mysql:host=$mysql_hostname;dbname=$mysql_dbname", $mysql_username, $mysql_password);
        /*** $message = a message saying we have connected ***/

        /*** set the error mode to excptions ***/
        $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

        /*** prepare the insert ***/
        $stmt = $dbh->prepare("SELECT phpro_username FROM phpro_users 
        WHERE phpro_user_id = :phpro_user_id");

        /*** bind the parameters ***/
        $stmt->bindParam(':phpro_user_id', $_SESSION['user_id'], PDO::PARAM_INT);

        /*** execute the prepared statement ***/
        $stmt->execute();

        /*** check for a result ***/
        $phpro_username = $stmt->fetchColumn();

        /*** if we have no something is wrong ***/
        if($phpro_username == false)
        {
            $message = 'Access Error';
        }
        else
        {
            $message = 'Welcome '.$phpro_username;
        }
    }
    catch (Exception $e)
    {
        /*** if we are here, something is wrong in the database ***/
        $message = 'We are unable to process your request. Please try again later"';
    }
}

?>

2 个答案:

答案 0 :(得分:1)

由于您添加了新列,因此您应该获得新值:

`$stmt = $dbh->prepare("SELECT phpro_username, phpro_auth  FROM phpro_users WHERE phpro_user_id = :phpro_user_id);`

然后使用

if($row = $stmt -> fetch_assoc()) {
  if($row['phpro_auth'] == 'admin') {
    $massage = 'Welcome ,'.$row['phpro_username'];
  } else {
    $massage = 'Not authorized';
} else {
  $massage = 'Access Error';
}

向用户提供反馈他无法访问您网站的原因。我的代码中的第一个if语句将与你的相同。

答案 1 :(得分:0)

您只需要检查表中的相应值,看它是否返回管理员用户......

if($phpro_username == false && $phpro_rol == "admin")//or the correct data to be returned...
        {
            $message = 'Access Error';
        }