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

如何在AngularJS+PHP项目中获取MySQL特定ID数据并实现权限控制

解决方案:实现登录用户仅操作自身数据的权限控制

嘿,我来帮你一步步搞定这个问题!核心思路是后端精准返回当前用户的数据+前端根据登录状态控制操作权限,同时必须做好后端的安全校验,避免前端篡改数据绕过权限。


1. 先搞定登录状态的传递(获取当前用户唯一标识)

首先你需要在用户登录成功后,把用户的唯一标识(比如user_id,或者你表中用来区分用户的trainer_code)存入PHP Session,比如:

// 登录验证通过后执行
session_start();
$_SESSION['logged_in_user_id'] = $user_id; // 替换成你实际的用户唯一标识字段

2. 修改后端Details.php:只返回当前登录用户的数据

现在你的Details.php是返回全表数据,我们要改成仅返回当前登录用户的记录——这是最关键的安全步骤,不能依赖前端过滤:

<?php
session_start();
// 先检查用户是否登录,未登录直接返回空数据
if(!isset($_SESSION['logged_in_user_id'])){
    echo json_encode([]);
    exit;
}

require_once 'database_connections.php';

// 假设你的pokedstats表用user_id关联登录用户,替换成你实际的关联字段
$current_user_id = $_SESSION['logged_in_user_id'];
// 使用预处理语句防止SQL注入
$query = "SELECT * from pokedstats WHERE user_id = ?";
$stmt = mysqli_prepare($con, $query);
// 如果是字符串类型的标识,把"i"改成"s"
mysqli_stmt_bind_param($stmt, "i", $current_user_id);
mysqli_stmt_execute($stmt);
$result = mysqli_stmt_get_result($stmt);

$arr = array();
if(mysqli_num_rows($result) != 0) {
    while($row = mysqli_fetch_assoc($result)) {
        $arr[] = $row;
    }
}

echo json_encode($arr);
?>

3. 前端优化:控制编辑/删除按钮的显示(提升用户体验)

如果需要更友好的交互,可以在AngularJS中先获取当前用户信息,然后用ng-show控制按钮的显示,同时在操作函数里加权限校验:

第一步:修改controller.js获取当前用户信息

var crudApp = angular.module('crudApp',[]);
crudApp.controller("DbController",['$scope','$http', function($scope,$http){
    // 先获取当前登录用户的信息(需要你写一个getCurrentUser.php接口返回用户基本数据)
    $http.get('databaseFiles/getCurrentUser.php').success(function(userData){
        $scope.currentUser = userData;
        // 拿到用户信息后再加载数据
        getInfo();
    });

    function getInfo(){
        $http.post('databaseFiles/Details.php').success(function(data){
            $scope.details = data;
        });
    }

    // 编辑函数加权限校验
    $scope.editInfo = function(detail){
        if(detail.user_id !== $scope.currentUser.user_id){
            alert('你没有权限编辑这条数据!');
            return;
        }
        // 这里放原来的编辑逻辑
    };

    // 删除函数加权限校验
    $scope.deleteInfo = function(detail){
        if(detail.user_id !== $scope.currentUser.user_id){
            alert('你没有权限删除这条数据!');
            return;
        }
        // 这里放原来的删除逻辑
    };
}]);

第二步:修改index.php的按钮显示逻辑

<tr ng-repeat="detail in details| filter:search_query">
    <td>{{$index + 1}}</td>
    <td>{{detail.trainer_name}}</td>
    <td>{{detail.trainer_team}}</td>
    <td>{{detail.trainer_code}}</td>
    <td>
        <button class="btn btn-warning" ng-click="editInfo(detail)" title="Edit" ng-show="detail.user_id == currentUser.user_id">
            <span class="glyphicon glyphicon-edit"></span>
        </button>
    </td>
    <td>
        <button class="btn btn-danger" ng-click="deleteInfo(detail)" title="Delete" ng-show="detail.user_id == currentUser.user_id">
            <span class="glyphicon glyphicon-trash"></span>
        </button>
    </td>
</tr>

4. 最后补全安全漏洞:编辑/删除接口也要加权限校验

不要忘了在你的编辑、删除接口(比如Edit.php、Delete.php)里也加上Session校验和权限判断,确保用户只能操作自己的数据,比如删除接口示例:

<?php
session_start();
if(!isset($_SESSION['logged_in_user_id'])){
    echo json_encode(['status' => 'error', 'msg' => '请先登录']);
    exit;
}

require_once 'database_connections.php';

$current_user_id = $_SESSION['logged_in_user_id'];
$target_id = $_POST['detail_id']; // 前端传递的要删除的记录ID

// 先验证这条记录是否属于当前用户
$check_query = "SELECT user_id FROM pokedstats WHERE id = ?";
$stmt = mysqli_prepare($con, $check_query);
mysqli_stmt_bind_param($stmt, "i", $target_id);
mysqli_stmt_execute($stmt);
$result = mysqli_stmt_get_result($stmt);
$row = mysqli_fetch_assoc($result);

if($row['user_id'] != $current_user_id){
    echo json_encode(['status' => 'error', 'msg' => '无权限删除该数据']);
    exit;
}

// 执行删除操作
$delete_query = "DELETE FROM pokedstats WHERE id = ?";
$stmt = mysqli_prepare($con, $delete_query);
mysqli_stmt_bind_param($stmt, "i", $target_id);
mysqli_stmt_execute($stmt);

echo json_encode(['status' => 'success', 'msg' => '删除成功']);
?>

这样一套流程下来,就能实现登录用户只能看到和操作自身数据的需求了,后端校验是核心,前端控制只是提升用户体验~

内容的提问来源于stack exchange,提问作者Sai Kiran

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 07:46:37