-
Notifications
You must be signed in to change notification settings - Fork 1
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #29 from dimagi/sk/nav
various tweaks
- Loading branch information
Showing
23 changed files
with
239 additions
and
33 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,14 +1,29 @@ | ||
import pytest | ||
|
||
from commcare_connect.users.models import User | ||
from commcare_connect.users.tests.factories import UserFactory | ||
from commcare_connect.users.models import Organization, User | ||
from commcare_connect.users.tests.factories import OrgWithUsersFactory, UserFactory | ||
|
||
|
||
@pytest.fixture(autouse=True) | ||
def media_storage(settings, tmpdir): | ||
settings.MEDIA_ROOT = tmpdir.strpath | ||
|
||
|
||
@pytest.fixture | ||
def organization(db) -> Organization: | ||
return OrgWithUsersFactory() | ||
|
||
|
||
@pytest.fixture | ||
def user(db) -> User: | ||
return UserFactory() | ||
|
||
|
||
@pytest.fixture | ||
def org_user_member(organization) -> User: | ||
return organization.memberships.filter(role="member").first().user | ||
|
||
|
||
@pytest.fixture | ||
def org_user_admin(organization) -> User: | ||
return organization.memberships.filter(role="admin").first().user |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,16 @@ | ||
from commcare_connect.users.models import Organization | ||
|
||
|
||
def get_organization_for_request(request, view_kwargs): | ||
if not request.user.is_authenticated: | ||
return | ||
|
||
org_slug = view_kwargs.get("org_slug", None) | ||
if org_slug: | ||
try: | ||
return Organization.objects.get(slug=org_slug, memberships__user=request.user) | ||
except Organization.DoesNotExist: | ||
return None | ||
|
||
membership = request.user.memberships.select_related("organization").first() | ||
return membership.organization if membership else None |
Empty file.
Empty file.
20 changes: 20 additions & 0 deletions
20
commcare_connect/users/management/commands/promote_user_to_superuser.py
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,20 @@ | ||
from django.core.management.base import BaseCommand, CommandError | ||
|
||
from commcare_connect.users.models import User | ||
|
||
|
||
class Command(BaseCommand): | ||
help = "Promotes the given user to a superuser and provides admin access." | ||
|
||
def add_arguments(self, parser): | ||
parser.add_argument("email", type=str) | ||
|
||
def handle(self, email, **options): | ||
try: | ||
user = User.objects.get(email=email) | ||
except User.DoesNotExist: | ||
raise CommandError(f"No user with email {email} found!") | ||
user.is_superuser = True | ||
user.is_staff = True | ||
user.save() | ||
print(f"{email} successfully promoted to superuser and can now access the admin site") |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,31 @@ | ||
from django.utils.deprecation import MiddlewareMixin | ||
from django.utils.functional import SimpleLazyObject | ||
|
||
from .helpers import get_organization_for_request | ||
from .models import UserOrganizationMembership as Membership | ||
|
||
|
||
def _get_organization(request, view_kwargs): | ||
if not hasattr(request, "_cached_org"): | ||
team = get_organization_for_request(request, view_kwargs) | ||
request._cached_org = team | ||
return request._cached_org | ||
|
||
|
||
def _get_org_membership(request): | ||
if not hasattr(request, "_cached_org_membership"): | ||
org = request.org | ||
membership = None | ||
if org: | ||
try: | ||
membership = Membership.objects.get(organization=org, user=request.user) if org else None | ||
except Membership.DoesNotExist: | ||
pass | ||
request._cached_org_membership = membership | ||
return request._cached_org_membership | ||
|
||
|
||
class OrganizationMiddleware(MiddlewareMixin): | ||
def process_view(self, request, view_func, view_args, view_kwargs): | ||
request.org = SimpleLazyObject(lambda: _get_organization(request, view_kwargs)) | ||
request.org_membership = SimpleLazyObject(lambda: _get_org_membership(request)) |
28 changes: 28 additions & 0 deletions
28
...e_connect/users/migrations/0003_alter_userorganizationmembership_organization_and_more.py
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,28 @@ | ||
# Generated by Django 4.2.1 on 2023-07-25 09:24 | ||
|
||
from django.conf import settings | ||
from django.db import migrations, models | ||
import django.db.models.deletion | ||
|
||
|
||
class Migration(migrations.Migration): | ||
dependencies = [ | ||
("users", "0002_organization_userorganizationmembership"), | ||
] | ||
|
||
operations = [ | ||
migrations.AlterField( | ||
model_name="userorganizationmembership", | ||
name="organization", | ||
field=models.ForeignKey( | ||
on_delete=django.db.models.deletion.CASCADE, related_name="memberships", to="users.organization" | ||
), | ||
), | ||
migrations.AlterField( | ||
model_name="userorganizationmembership", | ||
name="user", | ||
field=models.ForeignKey( | ||
on_delete=django.db.models.deletion.DO_NOTHING, related_name="memberships", to=settings.AUTH_USER_MODEL | ||
), | ||
), | ||
] |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.