我的cms中的用户权限

时间:2013-05-05 08:42:14

标签: php

我正在开发一个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{....}

1 个答案:

答案 0 :(得分:2)

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

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

OOP方式

这是我推荐的。它需要创建一个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(登录后存储在会话中)和用户类型,您可以从中获取数据库或其他持久存储。