@@ -2,11 +2,13 @@ module Superset
2
2
class GuestToken
3
3
include Credential ::EmbeddedUser
4
4
5
- attr_accessor :embedded_dashboard_id , :current_user
5
+ attr_accessor :embedded_dashboard_id , :current_user , :current_user_sites , :current_user_programmes
6
6
7
- def initialize ( embedded_dashboard_id : , current_user : nil )
7
+ def initialize ( embedded_dashboard_id : , current_user : nil , current_user_sites : [ ] , current_user_programmes : [ ] )
8
8
@embedded_dashboard_id = embedded_dashboard_id
9
9
@current_user = current_user
10
+ @current_user_sites = current_user_sites
11
+ @current_user_programmes = current_user_programmes
10
12
end
11
13
12
14
def guest_token
@@ -20,7 +22,11 @@ def params
20
22
"id" : embedded_dashboard_id . to_s ,
21
23
"type" : "dashboard" }
22
24
] ,
23
- "rls" : [ ] ,
25
+ "rls" : [
26
+ {
27
+ "clause" : rls_filter_clause
28
+ }
29
+ ] ,
24
30
"user" : current_user_params
25
31
}
26
32
end
@@ -65,5 +71,18 @@ def access_token
65
71
def authenticator
66
72
@authenticator ||= Superset ::Authenticator . new ( credentials )
67
73
end
74
+
75
+ def rls_filter_clause
76
+ "#{ site_clause } AND #{ programme_clause } "
77
+ end
78
+
79
+ def site_clause
80
+ return true if current_user_sites . empty?
81
+ "site_id = ANY(ARRAY[#{ current_user_sites } ])"
82
+ end
83
+
84
+ def programme_clause
85
+ "programme = ANY(string_to_array(replace(trim(('#{ current_user_programmes . to_json } '), '[]'), '\" ', ''), ','))"
86
+ end
68
87
end
69
88
end
0 commit comments