adding user management

This commit is contained in:
Dominic DiTaranto 2025-11-16 17:40:38 -05:00
parent f27769e177
commit 75511b96d1
4 changed files with 96 additions and 15 deletions

View file

@ -1,4 +1,5 @@
v1.1
[ ] get stickies working
[ ] polls
[ ] watch forum, get email notifications when someone replies
[ ] @ replies?
@ -7,19 +8,6 @@ v1.1
[ ] chat room? IRC?
ACTION ITEMS:
DOMINIC ---
[x] join option without member area access
[x] NAV BAR
[x] list user api endpoint
[x] CSS
[x] Assets
[x] Pick better anonymous avatar
[x] figure out backing up DB
[x] soft-release
[x] GET Domain
[ ] email notifications when user signs up: disroot email
[ ] maybe start sending emails to users automatically too
[ ] full-release
KYRIE ----
[x] Welcome message

View file

@ -1,15 +1,28 @@
from django.contrib import admin
from django.urls import path, include
from web.views import signup, forum_threads, thread, custom_logout, profile, user_profile, denied, users, code_of_ethics, test_email
from web.views import (
signup,
forum_threads,
thread,
custom_logout,
profile,
user_profile,
denied,
users,
code_of_ethics,
# test_email,
manage_users
)
urlpatterns = [
path('markdownx/', include('markdownx.urls')),
path('admin/', admin.site.urls),
path('api/users/', users, name='users'),
path("accounts/", include("django.contrib.auth.urls")),
path("accounts/signup/", signup, name="signup"),
path("accounts/profile/", profile, name="profile"),
path("accounts/signup/", signup, name="signup"),
path('accounts/user_management/', manage_users, name="user_management"),
path("accounts/user/<user_id>", user_profile, name="user"),
path("accounts/denied/", denied, name="denied"),
path("code_of_ethics", code_of_ethics, name="code_of_ethics"),

View file

@ -0,0 +1,34 @@
<!DOCTYPE html>
{% extends "base.html" %}
{% block content %}
<table>
<tr>
<th>User ID</th>
<th>UserName</th>
<th>User Email</th>
<th>User Website</th>
<th>Is Member</th>
<th>Actions</th>
</tr>
{% for user in parsed_users %}
<tr>
<td>{{ user.id }}</td>
<td>{{ user.username }}</td>
<td>{{ user.email }}</td>
<td>
<a href="{{ user.url }}">link</a>
</td>
<td>{{ user.is_member }}</td>
<td>
<form method="post">
{% csrf_token %}
<a href="{% url 'admin:web_customuser_change' user.id %}">
<button>View Details</button>
</a>
<button type="submit" value="{{ user.id }}" name='make_member'>Make Member</button>
</form>
</td>
</tr>
{% endfor %}
</table>
{% endblock %}

View file

@ -3,6 +3,7 @@ from io import BytesIO
from PIL import Image
from django.contrib.auth import login, logout
from django.contrib.auth.models import Group
from django.contrib.auth.decorators import login_required, user_passes_test
from django.contrib import messages
from django.core.mail import send_mail
@ -16,6 +17,7 @@ from web.models.forum_subcategory import ForumSubcategory
from web.models.forum_post import ForumPost
from web.models.custom_user import CustomUser
def test_email(request):
send_mail(
subject='test email',
@ -37,12 +39,19 @@ def send_email(subject, message, recipients=None):
)
def is_superuser(user):
if user.is_authenticated:
return user.is_superuser
return False
def is_member(user):
if user.is_authenticated:
return user.groups.filter(name='Member').exists()
return False
# ACCOUNT MANAGEMENT ######################################
def signup(request):
if request.method == 'POST':
@ -128,6 +137,43 @@ def code_of_ethics(request):
return render(request, 'code_of_ethics.html')
# ADMIN UTILS #############################################
@login_required
@user_passes_test(is_superuser, login_url='/accounts/denied/')
def manage_users(request):
context = {}
if request.method == 'POST':
if 'make_member' in request.POST:
user_id = request.POST.get('make_member')
user = CustomUser.objects.filter(id=user_id).first()
member_group = Group.objects.get(name='Member')
user.groups.add(member_group)
send_email(
subject='Christian Webring - You have been added as a member!',
message=f'Hello {user.username},\n\nYou have been added as a member to the christian webring, please login here: https://members.christian-webring.org \n\n Thanks, \n the Christian Webring Team',
recipients=[user.email]
)
messages.success(request, f"You added {user.username} as a member!")
non_members = []
members = []
users = CustomUser.objects.all()
for user in users:
if user.groups.filter(name='Member').exists():
user.is_member = True
members.append(user)
else:
user.is_member = False
non_members.append(user)
non_members.extend(members)
context['parsed_users'] = non_members
return render(request, 'user_management.html', context)
# FORUM ###################################################
@login_required
@user_passes_test(is_member, login_url='/accounts/denied/')