Skip to content

Commit 86e13bf

Browse files
author
Allen Short
committed
properly handle view_only permission in groups API
1 parent 84d0da3 commit 86e13bf

File tree

2 files changed

+17
-12
lines changed

2 files changed

+17
-12
lines changed

redash/handlers/groups.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -128,7 +128,7 @@ def post(self, group_id):
128128
'member_id': data_source.id
129129
})
130130

131-
return data_source.to_dict(with_permissions=True)
131+
return data_source.to_dict(with_permissions_for=group)
132132

133133
@require_admin
134134
def get(self, group_id):
@@ -139,7 +139,7 @@ def get(self, group_id):
139139
.join(models.DataSourceGroup)\
140140
.where(models.DataSourceGroup.group == group)
141141

142-
return [ds.to_dict(with_permissions=True) for ds in data_sources]
142+
return [ds.to_dict(with_permissions_for=group) for ds in data_sources]
143143

144144

145145
class GroupDataSourceResource(BaseResource):
@@ -160,7 +160,7 @@ def post(self, group_id, data_source_id):
160160
'view_only': view_only
161161
})
162162

163-
return data_source.to_dict(with_permissions=True)
163+
return data_source.to_dict(with_permissions_for=group)
164164

165165
@require_admin
166166
def delete(self, group_id, data_source_id):

redash/models.py

Lines changed: 14 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -371,7 +371,7 @@ class DataSource(BelongsToOrgMixin, db.Model):
371371
__tablename__ = 'data_sources'
372372
__table_args__ = (db.Index('data_sources_org_id_name', 'org_id', 'name'),)
373373

374-
def to_dict(self, all=False, with_permissions=False):
374+
def to_dict(self, all=False, with_permissions_for=None):
375375
d = {
376376
'id': self.id,
377377
'name': self.name,
@@ -389,8 +389,10 @@ def to_dict(self, all=False, with_permissions=False):
389389
d['scheduled_queue_name'] = self.scheduled_queue_name
390390
d['groups'] = self.groups
391391

392-
if with_permissions:
393-
d['view_only'] = self.data_source_groups.view_only
392+
if with_permissions_for is not None:
393+
d['view_only'] = db.session.query(DataSourceGroup.view_only).filter(
394+
DataSourceGroup.group == with_permissions_for,
395+
DataSourceGroup.data_source == self).get()
394396

395397
return d
396398

@@ -438,17 +440,20 @@ def resume(self):
438440
redis_connection.delete(self._pause_key())
439441

440442
def add_group(self, group, view_only=False):
441-
dsg = DataSourceGroup.create(group=group, data_source=self, view_only=view_only)
442-
setattr(self, 'data_source_groups', dsg)
443+
dsg = DataSourceGroup(group=group, data_source=self, view_only=view_only)
444+
db.session.add(dsg)
443445

444446
def remove_group(self, group):
445-
DataSourceGroup.delete().where(DataSourceGroup.group==group, DataSourceGroup.data_source==self).execute()
447+
db.session.query(DataSourceGroup).filter(
448+
DataSourceGroup.group == group,
449+
DataSourceGroup.data_source == self).delete()
446450

447451
def update_group_permission(self, group, view_only):
448-
dsg = DataSourceGroup.get(DataSourceGroup.group==group, DataSourceGroup.data_source==self)
452+
dsg = db.session.query(DataSourceGroup).filter(
453+
DataSourceGroup.group == group,
454+
DataSourceGroup.data_source == self)
449455
dsg.view_only = view_only
450-
dsg.save()
451-
setattr(self, 'data_source_groups', dsg)
456+
db.session.add(dsg)
452457

453458
@property
454459
def query_runner(self):

0 commit comments

Comments
 (0)