用户单击表格行时显示详细信息

Posted

技术标签:

【中文标题】用户单击表格行时显示详细信息【英文标题】:Display details when user click table row 【发布时间】:2018-10-25 15:37:03 【问题描述】:

我的数据库中有以下表格:

学生(student_id、电子邮件、姓名……) 课程(course_id、course_name、...) 注册(student_id、course_id、分数...)

我想实现这个功能:

    当管理员想要搜索特定城市所有学生的列表时, 列表显示为 html 表格。

这可以通过查询学生表来实现。

    当管理员单击任意行时(从我们在 1 中显示的表中) 然后管理员应该看到学生注册的所有课程的列表 在。

我的问题是我应该如何实现它? 我可以想到以下几种方式:方式1: https://***.com/a/45135144/3494107 我需要有一些方法来确定管理员点击了哪一行,为此我可以在结果表中传递 student_id 为 1(显示所有学生的列表),但由于 student_id 没有向管理员传达任何关于学生的信息我可以只需将其隐藏在<tr><a href=/enrollment/$student_id>data-* 属性中,以便我可以使用它来识别管理员单击了哪一行。我的一些朋友告诉我,我不应该暴露代理密钥,这对安全性不利。那么有什么方法可以将这个 student_id 关联到表行但对用户隐藏,或者可以向用户公开代理键内容? 方式 2: 我可以在数据库中创建一个包含来自特定城市的所有学生的临时表,并为其分配行 ID。现在结果我可以将每一行的这个行 ID 添加到 data-* 属性中。此行 ID 不传达有关实际 student_id 的任何信息,我可以使用此行 ID 查询临时表以获取可用于在注册表中搜索的实际 student_id。现在我需要在用户离开当前页面(转到其他功能)时删除这个临时表,现在我应该如何检测用户何时离开这个页面? 我想了解如果我向用户公开代理密钥会出现什么安全问题?

【问题讨论】:

【参考方案1】:

如果您公开student_id,则不会出现此类安全问题,但从业务角度来看,这不太可接受。

如果这些表格仅供管理员查看,那么无论哪种方式都不是问题。

如果这些内容即使是访客也可以看到,那么最好不要暴露student_id。不是为了您的数据库的安全,而是为了您的业务的安全。它可能会暴露你的强项和弱点。

您可以改用student_registration_no。考虑到VARCHAR 条目,它可能会很慢,但人类无法检测到。

【讨论】:

您能否详细说明您所说的可能会暴露您的业务优势和劣势的意思?我给出的场景是假设的。实际上,我想为客户实施基于订阅的服务,例如 asana.com 或 jira.com,其中客户的管理员角色应该能够查看他们拥有的项目列表或员工列表,并且在单击特定员工后他们应该能够查看项目或员工下的所有任务列表。我可以看到 asana 将 ID 放入链接 https://app.asana.com/0/63...18/board 但我不确定这是否是代理键 @LovelyGuyAnSh 关于业务优势和劣势,我的意思是假设您有 100 名学生在您的网站上注册,但您正在做广告,因为那里有 500 多名学生很容易发现您正在显示一些虚假数据,只是一个例子。安全部分在这里并不是那么重要,因为黑客不会依赖于你所展示的价值观。他们将直接进行 SQL 注入或其他攻击,以从您的数据库中提取所需的值。不仅您提到的网站显示 ID,而且该网站本身也在这样做。甚至像 vB 这样的论坛软件也能做到。

以上是关于用户单击表格行时显示详细信息的主要内容,如果未能解决你的问题,请参考以下文章

显示表格特定行的详细信息

WPF:DataGrid.RowDetailsTemplate:仅在选择单行时显示详细信息?

单击表格行时,SecondViewController 上显示的信息错误

在按钮单击 Angular 2 上显示详细信息

使用引导表创建行/详细信息显示

如何显示特定表格单元格对象的详细信息?