Forum Discussion
DYNAMIC RLS Setup based of SEARCH STRING Function
I have two tables, Table A and Table B.
Table A contains a column with primary keys assigned to specific users.
- USER1: abcd-efg-hij
- USER2: efg-hij-klm
- USER1: jdgd-fgsy-jdsfs
A single user can have multiple unique keys.
Table B contains keys that originate from Table A but with added extensions. For example:
- abcd-efg-hij-kjfekbk-djbbjf-mnjd → CHINA
- abcd-efg-hij → AUSTRIA
- efg-hijwrd-sajd-wqeye → INDIA
- efg-hij-klm-sdfbksdb-dfshd → MEXICO
- hij-klm → BRAZIL
- hij-klm-kbfekbfk → CHILE
Goal
I want to set up Row-Level Security (RLS) so that when a user logs in:
- Table A filters the keys based on the assigned user.
- Table B should be filtered to include any rows where the key contains a partial match with the keys from Table A.
Example
If USER1 has the key abcd-efg-hij in Table A, then Table B should be filtered to include:
- abcd-efg-hij-kjfekbk-djbbjf-mnjd → CHINA
- abcd-efg-hij → AUSTRIA
I used `CONTAINSSTRING`, but the `MAX` function restricts the search to a single key at a time, preventing the expected outcome. It worked fine when a user had only one key, but for users with multiple keys, it only considers the maximum value, causing incorrect filtering.
----------------------------------------------------------------------------------------
---------------------------------------------------------------------------------------------------------------------
Please suggest any possible solution.
2 Replies
- lbendlinSuper User
Use GENERATE to iterate dynamically over all strings.
- AnonymousNot applicable
Hi novel ,
Pls has your problem been solved? If so, accept the reply as a solution. This will make it easier for the future people to find the answer quickly.
If not, please provide a more detailed description.
Best Regards,
Stephen Tao