PHP与Tapkey集成咨询:如何为用户授予一年门禁权限?
门禁一年权限授予PHP示例
核心逻辑说明
实现用户门禁权限授予,本质是在数据库中关联用户ID与门禁ID,并设置权限有效期为当前时间起一年。以下是完整的代码示例,包含数据库表结构、权限授予逻辑及基础验证。
数据库表结构示例
首先需要两张核心表(可根据现有系统调整字段):
-- 用户表(假设已存在) CREATE TABLE users ( id INT PRIMARY KEY AUTO_INCREMENT, username VARCHAR(50) NOT NULL, -- 其他用户字段... ); -- 门禁权限表 CREATE TABLE door_access_permissions ( id INT PRIMARY KEY AUTO_INCREMENT, user_id INT NOT NULL, door_id INT NOT NULL, start_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, end_time DATETIME NOT NULL, status TINYINT(1) NOT NULL DEFAULT 1, -- 1=有效,0=失效 FOREIGN KEY (user_id) REFERENCES users(id), UNIQUE KEY unique_user_door (user_id, door_id) -- 避免重复授权 );
PHP权限授予代码示例
使用PDO实现安全的数据库操作,防止SQL注入:
<?php // 数据库连接配置 $dbHost = 'localhost'; $dbName = 'your_database'; $dbUser = 'your_username'; $dbPass = 'your_password'; try { // 初始化PDO连接 $pdo = new PDO("mysql:host=$dbHost;dbname=$dbName;charset=utf8mb4", $dbUser, $dbPass); $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); /** * 为用户授予指定门禁的一年权限 * @param int $userId 用户ID * @param int $doorId 门禁ID * @return bool 操作是否成功 */ function grantDoorAccess($userId, $doorId, $pdo) { // 计算一年后的时间 $endTime = date('Y-m-d H:i:s', strtotime('+1 year')); // 先检查是否已有有效权限,避免重复添加 $checkStmt = $pdo->prepare("SELECT id FROM door_access_permissions WHERE user_id = ? AND door_id = ? AND status = 1 AND end_time > NOW()"); $checkStmt->execute([$userId, $doorId]); if ($checkStmt->rowCount() > 0) { echo "该用户已拥有此门禁的有效权限"; return false; } // 插入/更新权限记录 $stmt = $pdo->prepare(" INSERT INTO door_access_permissions (user_id, door_id, end_time) VALUES (?, ?, ?) ON DUPLICATE KEY UPDATE end_time = ?, status = 1 "); $result = $stmt->execute([$userId, $doorId, $endTime, $endTime]); return $result; } // 调用示例:给ID为123的用户授予ID为45的门禁一年权限 $userId = 123; $doorId = 45; if (grantDoorAccess($userId, $doorId, $pdo)) { echo "权限授予成功"; } else { echo "权限授予失败"; } } catch(PDOException $e) { echo "数据库错误: " . $e->getMessage(); } ?>
权限验证示例(可选)
如果需要验证用户是否有权限开门,可以添加以下函数:
/** * 验证用户是否拥有指定门禁的有效权限 * @param int $userId 用户ID * @param int $doorId 门禁ID * @return bool 是否有权限 */ function checkDoorAccess($userId, $doorId, $pdo) { $stmt = $pdo->prepare(" SELECT id FROM door_access_permissions WHERE user_id = ? AND door_id = ? AND status = 1 AND end_time > NOW() "); $stmt->execute([$userId, $doorId]); return $stmt->rowCount() > 0; } // 调用示例 if (checkDoorAccess(123, 45, $pdo)) { echo "用户有权限开门"; } else { echo "用户无有效权限"; }
内容的提问来源于stack exchange,提问作者Chatis
相关产品推荐
相关产品推荐

