Paulo456 commented on issue #31466:
URL: https://github.com/apache/superset/issues/31466#issuecomment-4066482074
I decided for myself like this
===================================================================
diff --git a/superset/row_level_security/api.py
b/superset/row_level_security/api.py
--- a/superset/row_level_security/api.py (revision
cc066b35761098d1ec557b9149b855dc6ad2f530)
+++ b/superset/row_level_security/api.py (date 1773654994505)
@@ -44,6 +44,7 @@
RLSPutSchema,
RLSShowSchema,
)
+from superset.row_level_security.filters import FilterRelatedRoles
from superset.views.base import DatasourceFilter
from superset.views.base_api import (
BaseSupersetModelRestApi,
@@ -137,6 +138,7 @@
allowed_rel_fields = {"tables", "roles", "created_by", "changed_by"}
related_field_filters = {
"tables": RelatedFieldFilter("table_name", FilterRelatedTables),
+ "roles": RelatedFieldFilter("name", FilterRelatedRoles),
"changed_by": RelatedFieldFilter("first_name", FilterRelatedOwners),
}
base_related_field_filters = {
Index: superset/row_level_security/filters.py
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
diff --git a/superset/row_level_security/filters.py
b/superset/row_level_security/filters.py
new file mode 100644
--- /dev/null (date 1773654931512)
+++ b/superset/row_level_security/filters.py (date 1773654931512)
@@ -0,0 +1,29 @@
+from typing import Any, Optional
+
+from flask_babel import lazy_gettext as _
+from sqlalchemy.orm.query import Query
+
+from superset import security_manager
+from superset.views.base import BaseFilter
+
+
+class FilterRelatedRoles(BaseFilter):
+ """
+ A filter to allow searching for related roles of a resource.
+
+ Use in the api by adding something like:
+ related_field_filters = {
+ "roles": RelatedFieldFilter("name", FilterRelatedRoles),
+ }
+ """
+
+ name = _("Role")
+ arg_name = "roles"
+
+ def apply(self, query: Query, value: Optional[Any]) -> Query:
+ role_model = security_manager.role_model
+ if value:
+ return query.filter(
+ role_model.name.ilike(f"%{value}%"),
+ )
+ return query
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]