Skip to content

Commit e71e64c

Browse files
shreyanshdwivediiamareebjamal
authored andcommitted
fix: checks on session and role-invite api and owner role (#6131)
1 parent f5428b8 commit e71e64c

File tree

5 files changed

+58
-4
lines changed

5 files changed

+58
-4
lines changed

app/api/admin_statistics_api/users.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ class Meta:
3030
admin = fields.Method("admin_count")
3131
verified = fields.Method("verified_count")
3232
unverified = fields.Method("unverified_count")
33+
owner = fields.Method("owner_count")
3334
organizer = fields.Method("organizer_count")
3435
coorganizer = fields.Method("coorganizer_count")
3536
attendee = fields.Method("attendee_count")
@@ -53,6 +54,9 @@ def get_all_user_roles(self, role_name):
5354
UsersEventsRoles.role == role).distinct()
5455
return newquery
5556

57+
def owner_count(self, obj):
58+
return self.get_all_user_roles('owner').count()
59+
5660
def organizer_count(self, obj):
5761
return self.get_all_user_roles('organizer').count()
5862

app/api/role_invites.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -112,8 +112,10 @@ def before_update_object(self, role_invite, data, view_kwargs):
112112
"""
113113
user = User.query.filter_by(email=role_invite.email).first()
114114
if user:
115-
if not has_access('is_user_itself', user_id=user.id):
116-
raise UnprocessableEntity({'source': ''}, "Only users can edit their own status")
115+
if not has_access('is_organizer', event_id=role_invite.event_id) and not has_access('is_user_itself',
116+
user_id=user.id):
117+
raise UnprocessableEntity({'source': ''},
118+
"Status can be updated only by event organizer or user hiself")
117119
if not user and not has_access('is_organizer', event_id=role_invite.event_id):
118120
raise UnprocessableEntity({'source': ''}, "User not registered")
119121
if not has_access('is_organizer', event_id=role_invite.event_id) and (len(list(data.keys())) > 1 or

app/api/sessions.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -141,7 +141,7 @@ def before_update_object(self, session, data, view_kwargs):
141141
:return:
142142
"""
143143
if data.get('is_locked') != session.is_locked:
144-
if not (has_access('is_admin') or has_access('is_organizer')):
144+
if not (has_access('is_admin') or has_access('is_organizer', event_id=session.event_id)):
145145
raise ForbiddenException({'source': '/data/attributes/is-locked'},
146146
"You don't have enough permissions to change this property")
147147

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
"""Adding permissions for owner
2+
3+
Revision ID: 43e8c59337ag
4+
Revises: 43e8c59337af
5+
Create Date: 2019-07-03 13:21:58.92665
6+
7+
"""
8+
9+
from alembic import op
10+
import sqlalchemy as sa
11+
import sqlalchemy_utils
12+
13+
14+
# revision identifiers, used by Alembic.
15+
revision = '43e8c59337ag'
16+
down_revision = '43e8c59337af'
17+
18+
19+
def upgrade():
20+
op.execute("INSERT INTO permissions(role_id, service_id, can_create, can_read, can_update, can_delete) \
21+
VALUES((SELECT id FROM roles WHERE name='owner'), (SELECT id from services where name='track'), \
22+
true, true, true, true)", execution_options=None)
23+
24+
op.execute("INSERT INTO permissions(role_id, service_id, can_create, can_read, can_update, can_delete) \
25+
VALUES((SELECT id FROM roles WHERE name='owner'), (SELECT id from services where name='session'), \
26+
true, true, true, true)", execution_options=None)
27+
28+
op.execute("INSERT INTO permissions(role_id, service_id, can_create, can_read, can_update, can_delete) \
29+
VALUES((SELECT id FROM roles WHERE name='owner'), (SELECT id from services where name='speaker'), \
30+
true, true, true, true)", execution_options=None)
31+
32+
op.execute("INSERT INTO permissions(role_id, service_id, can_create, can_read, can_update, can_delete) \
33+
VALUES((SELECT id FROM roles WHERE name='owner'), (SELECT id from services where name='sponsor'), \
34+
true, true, true, true)", execution_options=None)
35+
36+
op.execute("INSERT INTO permissions(role_id, service_id, can_create, can_read, can_update, can_delete) \
37+
VALUES((SELECT id FROM roles WHERE name='owner'), (SELECT id from services where name='microlocation'), \
38+
true, true, true, true)", execution_options=None)
39+
40+
41+
42+
def downgrade():
43+
op.execute("DELETE FROM permissions WHERE role_id=(SELECT id FROM roles WHERE name='owner')")

populate_db.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -210,16 +210,21 @@ def create_permissions():
210210
mod = Role.query.get(4)
211211
attend = Role.query.get(5)
212212
regist = Role.query.get(6)
213+
ownr = Role.query.get(7)
213214
track = Service.query.get(1)
214215
session = Service.query.get(2)
215216
speaker = Service.query.get(3)
216217
sponsor = Service.query.get(4)
217218
microlocation = Service.query.get(5)
218219

219-
# For ORGANIZER
220+
# For ORGANIZER and OWNER
220221
# All four permissions set to True
221222
services = [track, session, speaker, sponsor, microlocation]
222223
roles = [attend, regist]
224+
for service in services:
225+
perm, _ = get_or_create(Permission, role=ownr, service=service)
226+
db.session.add(perm)
227+
223228
for service in services:
224229
perm, _ = get_or_create(Permission, role=orgr, service=service)
225230
db.session.add(perm)

0 commit comments

Comments
 (0)