2013-04-01 223 views
0

我正在研究一个项目,其中用户的记录访问权限基于用户的用户组进行限制。我创建了一个全局变量$ usr_sec_group,并且我想为几个应用程序的SELECT语句中的WHERE子句添加一个CASE语句,该语句根据$ usr_sec_group的值应用不同的过滤器。我是一个关于mySQL的亲戚“新手”,我在写这样的陈述方面的尝试没有奏效。这是基本的逻辑:SELECT WHERE CASE语句

SELECT 
    field1, 
    field2, 
    etc 
FROM 
    Organizations 
CASE $user_sec_group 
    WHEN 1 THEN 'filter_statement_1' 
    WHEN 2 THEN 'filter_statement_2' 
    WHEN 3 THEN 'filter_statement_3' 
    ELSE 'filter_statement_else' 
END CASE 
ORDER By 
    field1 

的“filter_statements”可以是任何有效的过滤器,如

'oName => 'a' AND oName < 'g' 

我假设的问题是语法的一个相对简单的事情,但到目前为止,我无法编写可行的CASE语句。

我将不胜感激一些指导!

回答

0

你尝试的解决方案是行不通的

最好的问候,

埃里克:这不只是一个语法的问题,你将不得不使用动态SQL。即使你使用动态sql,它也是而不是管理访问权限的好方法。

一个更好的方法是创建在不同级别的访问的具体意见,然后授予特定的用户适当的访问权限,并撤销其他接入:

GRANT SELECT ON MyDatabase.viewABC 
    TO 'someuser'@'somehost'; 

+0

感谢米奇,您的回应。由于我正在使用的应用程序开发工具集(ScriptCase)有一个用于管理用户访问视图/应用程序的模块,因此我原本想要创建更多视图。但是,我希望找到一个更优雅的解决方案,不会增加需要维护的视图/应用程序的数量。 – user1814188

+0

视图通常是一件好事(只要你没有观看视图的意见等)。 –