我正在从表单创建用户,并且表单的一部分通过选择复选框指定用户的访问权限,并且在验证时,我会将这些值分组为如下字符串: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';
}
答案 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更好,这仅仅是为了示例目的。