首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如果用户是管理员,则控制列的显示。

如果用户是管理员,则控制列的显示。
EN

Stack Overflow用户
提问于 2018-07-17 12:50:17
回答 2查看 364关注 0票数 0

我是新的sql,我使用myphpadmin作为我的数据库,我试图控制列的显示,如果用户登录是否是管理。我显示的列来自两个不同的表,即TableA和Tableb。我确实组合了两个在列中具有公共值的表,如果登录的用户是管理员,那么需要显示的所有列都会显示,但是如果登录的用户是管理员,我不知道如何控制显示。

我有三张桌子的名字;

代码语言:javascript
复制
TableA:

 id      Name    Section    Grade    status

 1a      aika    Section1    A       Active
 2s                          B       Inactive

===========================================

代码语言:javascript
复制
TableB:

id     PR_id     Name      Section    

111    2s      laika       Section2   
222    2s      Bes         Section3 

用于在一起显示列的查询

代码语言:javascript
复制
 SELECT * FROM TableA WHERE Name != ''
 UNION
 SELECT TableA.id, TableB.Name, TableB.Section, TableA.Grade, TableA.status 
 FROM TableA 
 INNER JOIN TableB ON TableA.id = TableB.PR_id

产出是;

代码语言:javascript
复制
 id   Name   Section     Grade    status    

 1a   aika   Section1    A        Active      
 2s   laika  Section2    B        Inactive
 2s   Bes    Section3    B        Inactive

表用户

代码语言:javascript
复制
  id    username     usertype
  1     aika         admin
  2     den          user
  3     lina         user

如果艾卡是因为她是管理员而登录的话

所有这些列都将显示给行政部门。

代码语言:javascript
复制
 id   Name   Section     Grade    status    

 1a   aika   Section1    A        Active      
 2s   laika  Section2    B        Inactive
 2s   Bes    Section3    B        Inactive

但是,如果den/lina因为她是用户而登录,那么将只显示给她的列在下面,她将不会看到列级别

代码语言:javascript
复制
 id   Name   Section       status    

 1a   aika   Section1     Active      
 2s   laika  Section2     Inactive
 2s   Bes    Section3     Inactive

我正在尝试这个查询,但它不起作用,我非常感谢您的任何建议或建议/帮助。

代码语言:javascript
复制
 Select usertype from Tableuser Where usertype='Admin'( SELECT * FROM TableA 
 WHERE Name != ''
 UNION
 SELECT TableA.id, TableB.Name, TableB.Section, TableA.Grade, TableA.status 
 FROM TableA 
 INNER JOIN TableB ON TableA.id = TableB.PR_id
EN

回答 2

Stack Overflow用户

发布于 2018-07-17 15:07:58

我想你找错地方来解决你的问题了。实际上,您已经以两种不同的方式(通过phpMyAdmin和通过SQL查询进行限制)询问了这一点,我认为第三种方式是最好的解决方案。

通过phpMyAdmin

您可以通过phpMyAdmin和MySQL/MariaDB列级权限来限制这一点。这要求您为每个用户提供自己的MySQL/MariaDB用户帐户,这与Tableuser无关。我不建议这样做,因为您通常希望在应用程序中处理用户身份验证,而不是以MySQL/MariaDB用户的身份验证,但是您问了,下面是要做的事情:

首先,像平常一样创建新的用户帐户。然后,在生成的页面上(或任何时候从“用户帐户”选项卡编辑该用户),单击“数据库”子选项卡:

从列表中选择正确的数据库,然后单击Go。

下一页显示数据库级权限。这听起来好像你不想允许,但你的需求可能会有所不同。

再次查看顶部的“表”选项卡。这将带您进入表级权限。

为该用户选择适当的权限;例如,为除“等级”以外的所有列选择权限:

现在,您已经在数据库级别限制了用户帐户,使其无法从该列中进行选择。

一个警告是,当用户在phpMyAdmin中并尝试浏览该表时,他们将得到一个错误;这是因为phpMyAdmin试图运行一个"SELECT *.“查询表,当然权限会阻止这一点。最简单的解决方法是添加一个书签,它有一个类似于SELECT `id`, `name`, `section`, `status` FROM `TableA`的查询。将此书签命名为与表相同的名称,当用户单击Browse链接时,将使用它代替"SELECT *“查询。

结果:

通过你的申请

如果应用程序查询数据库,则可以动态生成适当的查询:SELECT `usertype` FROM `Tableuser` WHERE `id` = $userid;

然后使用一个简单的if测试;如果结果是'admin',将查询生成为SELECT `id`, `name`, `section`, `grade`, `status` FROM `TableA`,否则将查询设置为SELECT `id`, `name`, `section`, `status` FROM `TableA`。因为您可能正在构建“id”部分,这是处理这些问题的好方法。您还可以通过相同的测试向管理用户展示额外的功能,例如用户管理或节管理。(请注意,我使用的是一个简化的SELECT,与UNION/INNER查询相比,但是概念是相同的;我刚刚降低了复杂性,以提高可读性)

作为SQL查询

我认为您需要使用存储过程或函数来严格地在SQL中进行测试。没有原生MySQL/MariaDB风格SQL中的‘’if/SQL/SQL‘构造,根据管理测试的结果,我看不到执行两种不同查询的明显方法。有足够动力的人可能能够拼凑出一个案例陈述或如果陈述,但在几分钟的测试中,我无法得到任何你想要的东西(例如,在'sakila‘数据库中运行SELECT (SELECT IF(1>2,'`first_name`','`last_name`')) FROM `actor` WHERE 1`没有返回预期的结果)。我很乐意被证明是错误的,但这似乎是一个脆弱的测试,更好地作为应用程序级的逻辑处理。

票数 0
EN

Stack Overflow用户

发布于 2021-06-20 07:57:24

回答你的问题有点难,但我可以猜出来。您要寻找的不是在phpmyadmin中实现的。PhpAdmin显示所有表和表包含的所有内容。

要根据需要从phpAdmin中显示各种结果,您必须至少学习一种查询这些表中数据的编程语言。许多人学习和使用PHP,所以这将是一个很好的起点。

祝你的编程好运。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51381846

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档