为了角色目的,在每个http请求上使用现有表名创建mysql视图

时间:2019-03-29 09:58:25

标签: php mysql performance view

我需要向我的应用程序添加权限和角色,但是我不想逐个文件地逐个文件访问。我需要的角色种类是例如仅显示数据库中特定的记录,具体取决于所连接的用户。 举例:我有一个"contracts_types"和一个"contracts"表,在列出"contracts"时,我将JOIN"contracts_types"一起使用,以便同时显示合同类型,因此,如果合同类型不存在,则不会显示合同,我想做的是,每次用户连接时都创建某种视图,该视图应包含具有以下内容的表的图像:过滤器:

CREATE VIEW contracts_types AS SELECT * FROM contracts_types WHERE contractTypeId IN( USER AUTHORISED CONTRACTS TYPES IDS )

我不确定是否可行,如果存在,是否存在性能问题,是否为每个连接的用户在每个http请求上创建相同的视图,我的意思是,其他用户将被连接,并且相同的视图名称为创建后,我正在寻找一种类似的解决方案,无需在我所做的每个select语句中添加contractTypeId过滤器,谢谢。

1 个答案:

答案 0 :(得分:0)

“因此,如果合同类型不存在,则不会显示该合同”-这就是这样做的原因:

SELECT ...
    FROM contracts AS c
    JOIN contract_types AS ct  ON ct.type = c.contract_type

还是您的问题涉及更多?

如果没有查询中的某种过滤器,则不能对表的进行任何过滤。

SELECT ...
    FROM contracts AS c
    JOIN contract_types AS ct  ON ct.type = c.contract_type
    JOIN role_can_see AS ucs  ON rcs.type = c.contract_type
    WHERE rcs.role = ?

(并填写用户所属的角色)

如果用户有多个角色,则

    WHERE rcs.role IN (...)

但这可以有效地自己实现“角色”。