0

我正在开发一个 cms 作为我的爱好,但我遇到了一些问题....在我的 mysql 数据库中,我有不同类别的用户:管理员、普通用户、退伍军人、高级等.....有没有办法创建一个php 文件包含每个用户类的设置?然后使用功能或其他东西来检查某个用户是否有权......例如创建一个页面......

目前我正在使用会话检查用户权限......

  If($_SESSION['user_type']=='Admin'||$_SESSION['user_type']=='premium'){
 //do stuff
 }else if()......... {
  // ..............
  }

但我想要这样的东西

check_user_right(user_name);
if ($can_create_page) == true{
 do......}else{....}
4

1 回答 1

2

首先,您应该知道您应该将用户信息存储在数据库中。然后,当有人登录并且您验证登录时,您可以将他或她的用户 ID 存储在会话中,然后要获取所有其他用户信息,例如user_type,您将根据该 ID 查询数据库。不确定你是否正在这样做,但如果你没有这样做,你应该这样做。

就用户权限而言,您有两种选择。

面向对象的方式

这是我推荐的。它需要创建一个User类,该类封装了从数据库中检索用户并随后检查该用户是否具有特定权限的所有逻辑。

class User {
    protected static $_rights = array(
        'admin'=>array(
            'create_page','remove_page', etc...
        )
    );
    public static retrieve($id) {
        // Call to your database or persistent storage to retrieve user info based on id
        return new static($retrieved_user_data);
    }

    public function has_right($right) {
        return in_array($right, static::$_rights[$this->user_type]);
    }
}

非 OOP 方式

这是低得多的级别,同时可能对您更好。基本上,您将为每个用户级别创建一组权限,并将其存储在与用于检查权限的函数相同的文件中。然后这个功能必须反过来包含在您计划使用它的每个页面上。

例如,假设您将函数放在一个名为 的文件functions.php中,它看起来像这样:

$user_rights = array(
    'admin'=>array('create_page','remove_page','edit_user',...),
    'veteran'=>array('ban_user','edit_page'),
    // Other rights here
);
function has_right($user_id, $right) {
    global $user_rights;
    // Retrieve information from persistent storage about the user
    // which I'm assuming you will store in $user_info
    return in_array($right, $user_rights[$user_info['user_type']]);
}

然后您应该将此文件包含在您要检查用户权限的任何其他文件中,然后您只需要用户 ID(登录后存储在会话中)和用户类型,您可以从数据库或其他持久存储。

于 2013-05-05T08:47:11.487 回答