Skip to content

Commit b959428

Browse files
committed
feat: support system variable
1 parent 527b18f commit b959428

File tree

1 file changed

+31
-6
lines changed

1 file changed

+31
-6
lines changed

backend/apps/datasource/crud/row_permission.py

Lines changed: 31 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@ def transTreeItem(session: SessionDep, current_user: CurrentUser, item: Dict, ds
7575

7676
# do inner system variable
7777
if sys_variable.type == 'system':
78-
res = whereName + whereTerm + getSysVariableValue(sys_variable, current_user, ds, field)
78+
res = whereName + whereTerm + getSysVariableValue(sys_variable, current_user, ds, field, item)
7979
else:
8080
# check user variable
8181
user_variables = current_user.system_variables
@@ -216,7 +216,8 @@ def userHaveVariable(user_variables: List, sys_variable: SystemVariable):
216216
return False
217217

218218

219-
def getSysVariableValue(sys_variable: SystemVariable, current_user: CurrentUser, ds: CoreDatasource, field: CoreField):
219+
def getSysVariableValue(sys_variable: SystemVariable, current_user: CurrentUser, ds: CoreDatasource, field: CoreField,
220+
item: Dict, ):
220221
v = None
221222
if sys_variable.value[0] == 'name':
222223
v = current_user.name
@@ -225,8 +226,32 @@ def getSysVariableValue(sys_variable: SystemVariable, current_user: CurrentUser,
225226
if sys_variable.value[0] == 'email':
226227
v = current_user.email
227228

228-
if ds.type == 'sqlServer' and (
229-
field.field_type == 'nchar' or field.field_type == 'NCHAR' or field.field_type == 'nvarchar' or field.field_type == 'NVARCHAR'):
230-
return f"N'{v}'"
229+
whereValue = ''
230+
if item['term'] == 'null':
231+
whereValue = ''
232+
elif item['term'] == 'not_null':
233+
whereValue = ''
234+
elif item['term'] == 'empty':
235+
whereValue = "''"
236+
elif item['term'] == 'not_empty':
237+
whereValue = "''"
238+
elif item['term'] == 'in' or item['term'] == 'not in':
239+
if ds.type == 'sqlServer' and (
240+
field.field_type == 'nchar' or field.field_type == 'NCHAR' or field.field_type == 'nvarchar' or field.field_type == 'NVARCHAR'):
241+
whereValue = f"(N'{v}')"
242+
else:
243+
whereValue = f"('{v}')"
244+
elif item['term'] == 'like' or item['term'] == 'not like':
245+
if ds.type == 'sqlServer' and (
246+
field.field_type == 'nchar' or field.field_type == 'NCHAR' or field.field_type == 'nvarchar' or field.field_type == 'NVARCHAR'):
247+
whereValue = f"N'%{v}%'"
248+
else:
249+
whereValue = f"'%{v}%'"
231250
else:
232-
return f"'{v}'"
251+
if ds.type == 'sqlServer' and (
252+
field.field_type == 'nchar' or field.field_type == 'NCHAR' or field.field_type == 'nvarchar' or field.field_type == 'NVARCHAR'):
253+
whereValue = f"N'{v}'"
254+
else:
255+
whereValue = f"'{v}'"
256+
257+
return whereValue

0 commit comments

Comments
 (0)