Skip to content

Commit 5a33b5d

Browse files
committed
[NEP-18176]: Implemeting data scoping based on user programmes and sites
1 parent 864b931 commit 5a33b5d

File tree

1 file changed

+22
-3
lines changed

1 file changed

+22
-3
lines changed

lib/superset/guest_token.rb

Lines changed: 22 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,13 @@ module Superset
22
class GuestToken
33
include Credential::EmbeddedUser
44

5-
attr_accessor :embedded_dashboard_id, :current_user
5+
attr_accessor :embedded_dashboard_id, :current_user, :current_user_sites, :current_user_programmes
66

7-
def initialize(embedded_dashboard_id: , current_user: nil)
7+
def initialize(embedded_dashboard_id: , current_user: nil, current_user_sites: [], current_user_programmes: [])
88
@embedded_dashboard_id = embedded_dashboard_id
99
@current_user = current_user
10+
@current_user_sites = current_user_sites
11+
@current_user_programmes = current_user_programmes
1012
end
1113

1214
def guest_token
@@ -20,7 +22,11 @@ def params
2022
"id": embedded_dashboard_id.to_s,
2123
"type": "dashboard" }
2224
],
23-
"rls": [],
25+
"rls": [
26+
{
27+
"clause": rls_filter_clause
28+
}
29+
],
2430
"user": current_user_params
2531
}
2632
end
@@ -65,5 +71,18 @@ def access_token
6571
def authenticator
6672
@authenticator ||= Superset::Authenticator.new(credentials)
6773
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
6887
end
6988
end

0 commit comments

Comments
 (0)