2

我正在从表单创建用户,表单的一部分通过选择复选框指定用户的访问权限,在验证时,我会将这些值分组为一个字符串,如: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';
}
4

2 回答 2

1

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

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

例如,如果您需要访问requiredAccess = 4该页面/功能,
那么您可以比较:

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

于 2013-07-17T10:01:17.893 回答
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 更好的方法,这只是为了示例目的。

于 2013-07-17T10:38:28.927 回答