我正在开发一个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{....}
答案 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(登录后存储在会话中)和用户类型,您可以从中获取数据库或其他持久存储。