设置用户访问权限的最佳做法?

时间:2013-07-17 09:40:55

标签: php codeigniter

我正在从表单创建用户,并且表单的一部分通过选择复选框指定用户的访问权限,并且在验证时,我会将这些值分组为如下字符串:111,011,101,类似于chmod代码。

我只是想知道是否有一种更有效的方法,因为我正在做的事情看起来非常重复,或者这是否是正确的做法。

HTML复选框

<input type="checkbox" name="access[1]" id="ac1"/> <label for="ac1">Consumer</label>
<input type="checkbox" name="access[2]" id="ac2"/> <label for="ac2">Retailer</label>
<input type="checkbox" name="access[3]" id="ac3"/> <label for="ac3">Admin</label>

控制器

$access = $this->input->post('access');
$user_access = '';  
if(!empty($access[1])) {
    $user_access .= '1';
} else {
    $user_access .= '0';
}
if(!empty($access[2])) {
    $user_access .= '1';
} else {
    $user_access .= '0';
}
if(!empty($access[3])) {
    $user_access .= '1';
} else {
    $user_access .= '0';
}

2 个答案:

答案 0 :(得分:1)

您可以使用访问级别创建常量,然后进行比较。例如
      CONSUMER => 1(最低访问级别,例如0表示未登录)
     RETAILER => 5
      ADMIN => 9(访问率最高)

然后,在评估访问权限时,您需要知道当前功能所需的访问级别并进行比较。

例如,如果您需要访问该页面/功能requiredAccess = 4,请执行 然后你可以比较:

if( requiredAccess <= userAccess ){
//用户有权访问
}else{
//用户没有访问权限 }

答案 1 :(得分:1)

我会将访问级别类型存储在数据库的表中。

将来,您可以在登录后查看这样的信息。

$stmt = $pdo->prepare("SELECT access_level FROM user WHERE ID = :userId");
$stmt->execute(array(":userId", $userId));

$userAccessLevel = $stmt->fetch();

$stmt = $pdo->prepare("SELECT access_level FROM access");
$stmt->execute();

foreach($stmt->fetch() as $key => $value)
{
    $retailAccessLevel = array($key => $value);
}

if($userAccessLevel == $retailAccessLevel[0])
{
    // do stuff
}
else if($userAccessLevel == $retailAccessLevel[1]
{
    // do stuff
}
else
{
    // Tough luck user.
}

然后你将拥有易于访问的变量,一个具有用户权限,另一个具有一组权限。这使您可以轻松地更改类型或在将来添加更多访问级别,而不必经常浏览所有代码并更改额外信息。请记住,我使用PDO并且使用PDO比使用PDO更好,这仅仅是为了示例目的。