You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 14:18:17