Skip to content

Commit 83b2dad

Browse files
committed
Replace is_wizard with more generic groups
1 parent c969ee7 commit 83b2dad

5 files changed

Lines changed: 36 additions & 5 deletions

File tree

auth/api.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,8 @@ def me():
2121
name=request.oauth.user.name,
2222
is_subscribed=request.oauth.user.has_active_sub,
2323
scopes=request.oauth.scopes,
24-
is_wizard=request.oauth.user.is_wizard,
24+
is_wizard='wizard' in request.oauth.user.groups,
25+
groups=request.oauth.user.groups,
2526
has_timeline=request.oauth.user.has_timeline,
2627
timeline_ttl=request.oauth.user.timeline_ttl,
2728
boot_overrides=request.oauth.user.boot_overrides

auth/discourse.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ def sso_redirect_url(nonce, user):
5050
'username': user.username
5151
}
5252

53-
if user.is_wizard:
53+
if 'wizard' in user.groups:
5454
attributes['admin'] = 'true'
5555

5656
add_groups = []

auth/models.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ class User(UserMixin, db.Model):
2929
stripe_subscription_id = db.Column(db.String, nullable=True, index=True)
3030
subscription_expiry = db.Column(db.DateTime, nullable=True)
3131
is_wizard = db.Column(db.Boolean, server_default='false')
32+
groups = db.Column(ARRAY(db.String), nullable=False, server_default='{}')
3233
boot_overrides = db.Column(JSONB)
3334
audio_debug_mode = db.Column(db.DateTime, nullable=True)
3435
username = db.Column(db.String(24), unique=True, index=True)
@@ -39,7 +40,7 @@ def has_active_sub(self):
3940

4041
@property
4142
def has_timeline(self):
42-
return self.is_wizard or self.has_active_sub or \
43+
return 'wizard' in self.groups or self.has_active_sub or \
4344
(datetime.datetime.utcnow() > (NONSUBSCRIBER_ROLLOUT_START + datetime.timedelta(seconds = self.id * 2)))
4445

4546
@property

auth/wizard/__init__.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ def format_datetime(value, format='%B %-d %Y, %H:%M:%S'):
1818
return value.strftime(format)
1919

2020
def ensure_wizard():
21-
if not current_user.is_wizard:
21+
if not 'wizard' in current_user.groups:
2222
abort(401, 'Hmm... how did you get here?')
2323

2424
def audit(str):
@@ -181,7 +181,8 @@ def make_wizard(idp_name, idp_user_id):
181181
identity = UserIdentity.query.filter_by(idp=idp_name, idp_user_id=idp_user_id).one()
182182
user = identity.user
183183

184-
user.is_wizard = True
184+
if not 'wizard' in user.group:
185+
user.groups = user.groups.append('wizard')
185186
db.session.commit()
186187

187188
print(f"Ok, made {user.name} <{user.email}> a wizard.")
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
"""Add groups array to User
2+
3+
Revision ID: 3ebafc557e02
4+
Revises: 29e40065e295
5+
Create Date: 2026-02-26 11:30:18.088070
6+
7+
"""
8+
from alembic import op
9+
import sqlalchemy as sa
10+
from sqlalchemy.dialects import postgresql
11+
12+
# revision identifiers, used by Alembic.
13+
revision = '3ebafc557e02'
14+
down_revision = '29e40065e295'
15+
branch_labels = None
16+
depends_on = None
17+
18+
19+
def upgrade():
20+
# ### commands auto generated by Alembic - please adjust! ###
21+
op.add_column('users', sa.Column('groups', postgresql.ARRAY(sa.String()), server_default='{}', nullable=False))
22+
# ### end Alembic commands ###
23+
24+
25+
def downgrade():
26+
# ### commands auto generated by Alembic - please adjust! ###
27+
op.drop_column('users', 'groups')
28+
# ### end Alembic commands ###

0 commit comments

Comments
 (0)