我正在从表单创建一个用户,表单的一部分通过选择复选框来指定用户的访问权限,在验证时,我会将这些值分组为一个字符串,如: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';
}
我会将访问级别类型存储在数据库的表中。
这样以后,一旦他们登录,你就可以像这样检查这些信息。
$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,这只是为了举例。
您可以创建具有访问级别的常量,然后进行比较。例如CONSUMER => 1
(最低访问级别,例如0表示未登录)RETAILER => 5
ADMIN => 9
(最高访问)
然后,在评估访问时,您需要知道当前功能所需的访问级别,并对其进行比较
例如,如果该页面/功能需要访问requiredAccess = 4
,
然后你可以比较像:
if( requiredAccess <= userAccess ){
//用户有权访问}else{
//用户没有访问权限}