WPF已登录用户插入仅自身可见数据库数据的实现咨询
实现方案
第一步:数据库与全局配置调整
- 给你的
Module表新增一个字段CreatedUserId,字段类型和你用户表的主键类型保持一致(比如用户ID为int就设为INT类型,为GUID就设为UNIQUEIDENTIFIER),用于存储创建这条数据的用户ID。 - 登录逻辑中新增全局存储的登录用户ID,可直接在App.xaml.cs中添加静态属性:
// App.xaml.cs中添加 public static int LoggedInUserId { get; set; }
用户登录验证通过后,将对应用户的ID赋值给App.LoggedInUserId即可。
第二步:修改插入代码
原有代码存在SQL注入风险、数据库连接未正确释放的问题,修改后代码如下,同时新增创建人ID的插入逻辑:
public bool Create(SemesterDetails details) { // 使用using自动释放数据库连接,无需手动关闭 using (SqlConnection db = new SqlConnection(AppConnect.Connection)) { try { // 新增CreatedUserId字段插入,使用参数化查询避免SQL注入 string insModule = @"INSERT INTO [Module](moduleCode,moduleName,modCredits,modHrsPerWeek,CreatedUserId) VALUES(@ModuleCode,@ModuleName,@ModuleCredits,@ModuleStudyHrs,@CreatedUserId)"; db.Open(); SqlCommand command = new SqlCommand(insModule, db); // 给参数赋值 command.Parameters.AddWithValue("@ModuleCode", details.ModuleCode); command.Parameters.AddWithValue("@ModuleName", details.ModuleName); command.Parameters.AddWithValue("@ModuleCredits", details.ModuleCredits); command.Parameters.AddWithValue("@ModuleStudyHrs", details.ModuleStudyHrs); // 插入当前登录用户的ID command.Parameters.AddWithValue("@CreatedUserId", App.LoggedInUserId); int i = command.ExecuteNonQuery(); return i > 0; } catch (Exception exc) { Console.WriteLine(exc.Message); } return false; } }
第三步:调整其余CRUD逻辑
所有查询、修改、删除数据的操作,都需要增加CreatedUserId的过滤条件:
- 查询数据时,SQL语句增加
WHERE CreatedUserId = @UserId,参数传入App.LoggedInUserId,确保只返回当前用户创建的数据 - 更新、删除数据时,同样增加
WHERE CreatedUserId = @UserId的条件,避免用户操作他人数据
内容的提问来源于stack exchange,提问作者Jacob
相关产品推荐
相关产品推荐

