Skip to content

Commit bf586c7

Browse files
committed
Making the code generic and adding specs
1 parent 863e144 commit bf586c7

File tree

2 files changed

+23
-22
lines changed

2 files changed

+23
-22
lines changed

lib/superset/guest_token.rb

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

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

7-
def initialize(embedded_dashboard_id: , current_user: nil, current_user_sites: [], current_user_programmes: [])
7+
def initialize(embedded_dashboard_id: , current_user: nil, rls_clause: [])
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
10+
@rls_clause = rls_clause
1211
end
1312

1413
def guest_token
@@ -22,11 +21,7 @@ def params
2221
"id": embedded_dashboard_id.to_s,
2322
"type": "dashboard" }
2423
],
25-
"rls": [
26-
{
27-
"clause": rls_filter_clause
28-
}
29-
],
24+
"rls": rls_clause || [], # Ex: [{ "clause": "publisher = 'Nintendo'" }]
3025
"user": current_user_params
3126
}
3227
end
@@ -71,18 +66,5 @@ def access_token
7166
def authenticator
7267
@authenticator ||= Superset::Authenticator.new(credentials)
7368
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
8769
end
8870
end

spec/superset/guest_token_spec.rb

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,5 +56,24 @@
5656
)
5757
end
5858
end
59+
60+
context 'with rls clause' do
61+
before { allow(subject).to receive(:rls_clause).and_return(rls_clause) }
62+
let(:user) { nil }
63+
let(:rls_clause) { [{ "clause": "publisher = 'Nintendo'" }] }
64+
specify do
65+
expect(subject.params).to eq(
66+
{
67+
"resources": [
68+
{
69+
"id": ss_dashboard_id,
70+
"type": "dashboard" }
71+
],
72+
"rls": rls_clause,
73+
"user": { }
74+
}
75+
)
76+
end
77+
end
5978
end
6079
end

0 commit comments

Comments
 (0)