prompt: We are currently solving the following issue within our repository. Here is the issue text:
  --- BEGIN ISSUE ---
  Cannot make other users admin on the website
  **Describe the bug**
  For the moment, there is no way to promote an user to be an admin. One has to do it in the "./bw-dev shell"
  
  **To Reproduce**
  Steps to reproduce the behavior:
  1. Go to 'Admin' and then the page of the user you want to promote
  2. Promote the user and save
  3. The "promoted user" logins in
  4. Nope, not promoted
  
  **Expected behavior**
  The logged in promoted user should see the admin panel.
  
  
  --- END ISSUE ---
  
  Below are some code segments, each from a relevant file. One or more of these files may contain bugs.
  --- BEGIN FILES ---
  Path: `bookwyrm/views/user_admin.py`
  Content:
  ```
  1 """ manage user """
  2 from django.contrib.auth.decorators import login_required, permission_required
  3 from django.core.paginator import Paginator
  4 from django.shortcuts import get_object_or_404
  5 from django.template.response import TemplateResponse
  6 from django.utils.decorators import method_decorator
  7 from django.views import View
  8 
  9 from bookwyrm import forms, models
  10 from bookwyrm.settings import PAGE_LENGTH
  11 
  12 
  13 # pylint: disable= no-self-use
  14 @method_decorator(login_required, name="dispatch")
  15 @method_decorator(
  16     permission_required("bookwyrm.moderate_users", raise_exception=True),
  17     name="dispatch",
  18 )
  19 class UserAdminList(View):
  20     """admin view of users on this server"""
  21 
  22     def get(self, request):
  23         """list of users"""
  24         filters = {}
  25         server = request.GET.get("server")
  26         if server:
  27             server = models.FederatedServer.objects.filter(server_name=server).first()
  28             filters["federated_server"] = server
  29             filters["federated_server__isnull"] = False
  30         username = request.GET.get("username")
  31         if username:
  32             filters["username__icontains"] = username
  33         scope = request.GET.get("scope")
  34         if scope:
  35             filters["local"] = scope == "local"
  36 
  37         users = models.User.objects.filter(**filters)
  38 
  39         sort = request.GET.get("sort", "-created_date")
  40         sort_fields = [
  41             "created_date",
  42             "last_active_date",
  43             "username",
  44             "federated_server__server_name",
  45             "is_active",
  46         ]
  47         if sort in sort_fields + ["-{:s}".format(f) for f in sort_fields]:
  48             users = users.order_by(sort)
  49 
  50         paginated = Paginator(users, PAGE_LENGTH)
  51         data = {
  52             "users": paginated.get_page(request.GET.get("page")),
  53             "sort": sort,
  54             "server": server,
  55         }
  56         return TemplateResponse(request, "user_admin/user_admin.html", data)
  57 
  58 
  59 @method_decorator(login_required, name="dispatch")
  60 @method_decorator(
  61     permission_required("bookwyrm.moderate_users", raise_exception=True),
  62     name="dispatch",
  63 )
  64 class UserAdmin(View):
  65     """moderate an individual user"""
  66 
  67     def get(self, request, user):
  68         """user view"""
  69         user = get_object_or_404(models.User, id=user)
  70         data = {"user": user, "group_form": forms.UserGroupForm()}
  71         return TemplateResponse(request, "user_admin/user.html", data)
  72 
  73     def post(self, request, user):
  74         """update user group"""
  75         user = get_object_or_404(models.User, id=user)
  76         form = forms.UserGroupForm(request.POST, instance=user)
  77         if form.is_valid():
  78             form.save()
  79         data = {"user": user, "group_form": form}
  80         return TemplateResponse(request, "user_admin/user.html", data)
  81
  ```
  --- END FILES ---
  
  Please first localize the bug based on the issue statement, and then generate a patch according to the `git diff` format fenced by three backticks.
  
  Here is an example:
  
  ```diff
  diff --git a/examples/server_async.py b/examples/server_async.py
  --- a/examples/server_async.py
  +++ b/examples/server_async.py
  @@ -313,4 +313,4 @@
   
   
   if __name__ == "__main__":
  -    asyncio.run(run_async_server("."), debug=True)
  +    asyncio.run(run_async_server(), debug=True)
  diff --git a/examples/server_sync.py b/examples/server_sync.py
  --- a/examples/server_sync.py
  +++ b/examples/server_sync.py
  @@ -313,5 +313,5 @@
   
   
   if __name__ == "__main__":
  -    server = run_sync_server(".")
  +    server = run_sync_server()
       server.shutdown()
  
  ```
  
golden_diff: diff --git a/bookwyrm/views/user_admin.py b/bookwyrm/views/user_admin.py
  --- a/bookwyrm/views/user_admin.py
  +++ b/bookwyrm/views/user_admin.py
  @@ -13,7 +13,7 @@
   # pylint: disable= no-self-use
   @method_decorator(login_required, name="dispatch")
   @method_decorator(
  -    permission_required("bookwyrm.moderate_users", raise_exception=True),
  +    permission_required("bookwyrm.moderate_user", raise_exception=True),
       name="dispatch",
   )
   class UserAdminList(View):
  
verification_info: {"golden_diff": "diff --git a/bookwyrm/views/user_admin.py b/bookwyrm/views/user_admin.py\n--- a/bookwyrm/views/user_admin.py\n+++ b/bookwyrm/views/user_admin.py\n@@ -13,7 +13,7 @@\n # pylint: disable= no-self-use\n @method_decorator(login_required, name=\"dispatch\")\n @method_decorator(\n-    permission_required(\"bookwyrm.moderate_users\", raise_exception=True),\n+    permission_required(\"bookwyrm.moderate_user\", raise_exception=True),\n     name=\"dispatch\",\n )\n class UserAdminList(View):\n", "issue": "Cannot make other users admin on the website\n**Describe the bug**\r\nFor the moment, there is no way to promote an user to be an admin. One has to do it in the \"./bw-dev shell\"\r\n\r\n**To Reproduce**\r\nSteps to reproduce the behavior:\r\n1. Go to 'Admin' and then the page of the user you want to promote\r\n2. Promote the user and save\r\n3. The \"promoted user\" logins in\r\n4. Nope, not promoted\r\n\r\n**Expected behavior**\r\nThe logged in promoted user should see the admin panel.\r\n\n", "before_files": [{"content": "\"\"\" manage user \"\"\"\nfrom django.contrib.auth.decorators import login_required, permission_required\nfrom django.core.paginator import Paginator\nfrom django.shortcuts import get_object_or_404\nfrom django.template.response import TemplateResponse\nfrom django.utils.decorators import method_decorator\nfrom django.views import View\n\nfrom bookwyrm import forms, models\nfrom bookwyrm.settings import PAGE_LENGTH\n\n\n# pylint: disable= no-self-use\n@method_decorator(login_required, name=\"dispatch\")\n@method_decorator(\n    permission_required(\"bookwyrm.moderate_users\", raise_exception=True),\n    name=\"dispatch\",\n)\nclass UserAdminList(View):\n    \"\"\"admin view of users on this server\"\"\"\n\n    def get(self, request):\n        \"\"\"list of users\"\"\"\n        filters = {}\n        server = request.GET.get(\"server\")\n        if server:\n            server = models.FederatedServer.objects.filter(server_name=server).first()\n            filters[\"federated_server\"] = server\n            filters[\"federated_server__isnull\"] = False\n        username = request.GET.get(\"username\")\n        if username:\n            filters[\"username__icontains\"] = username\n        scope = request.GET.get(\"scope\")\n        if scope:\n            filters[\"local\"] = scope == \"local\"\n\n        users = models.User.objects.filter(**filters)\n\n        sort = request.GET.get(\"sort\", \"-created_date\")\n        sort_fields = [\n            \"created_date\",\n            \"last_active_date\",\n            \"username\",\n            \"federated_server__server_name\",\n            \"is_active\",\n        ]\n        if sort in sort_fields + [\"-{:s}\".format(f) for f in sort_fields]:\n            users = users.order_by(sort)\n\n        paginated = Paginator(users, PAGE_LENGTH)\n        data = {\n            \"users\": paginated.get_page(request.GET.get(\"page\")),\n            \"sort\": sort,\n            \"server\": server,\n        }\n        return TemplateResponse(request, \"user_admin/user_admin.html\", data)\n\n\n@method_decorator(login_required, name=\"dispatch\")\n@method_decorator(\n    permission_required(\"bookwyrm.moderate_users\", raise_exception=True),\n    name=\"dispatch\",\n)\nclass UserAdmin(View):\n    \"\"\"moderate an individual user\"\"\"\n\n    def get(self, request, user):\n        \"\"\"user view\"\"\"\n        user = get_object_or_404(models.User, id=user)\n        data = {\"user\": user, \"group_form\": forms.UserGroupForm()}\n        return TemplateResponse(request, \"user_admin/user.html\", data)\n\n    def post(self, request, user):\n        \"\"\"update user group\"\"\"\n        user = get_object_or_404(models.User, id=user)\n        form = forms.UserGroupForm(request.POST, instance=user)\n        if form.is_valid():\n            form.save()\n        data = {\"user\": user, \"group_form\": form}\n        return TemplateResponse(request, \"user_admin/user.html\", data)\n", "path": "bookwyrm/views/user_admin.py"}], "after_files": [{"content": "\"\"\" manage user \"\"\"\nfrom django.contrib.auth.decorators import login_required, permission_required\nfrom django.core.paginator import Paginator\nfrom django.shortcuts import get_object_or_404\nfrom django.template.response import TemplateResponse\nfrom django.utils.decorators import method_decorator\nfrom django.views import View\n\nfrom bookwyrm import forms, models\nfrom bookwyrm.settings import PAGE_LENGTH\n\n\n# pylint: disable= no-self-use\n@method_decorator(login_required, name=\"dispatch\")\n@method_decorator(\n    permission_required(\"bookwyrm.moderate_user\", raise_exception=True),\n    name=\"dispatch\",\n)\nclass UserAdminList(View):\n    \"\"\"admin view of users on this server\"\"\"\n\n    def get(self, request):\n        \"\"\"list of users\"\"\"\n        filters = {}\n        server = request.GET.get(\"server\")\n        if server:\n            server = models.FederatedServer.objects.filter(server_name=server).first()\n            filters[\"federated_server\"] = server\n            filters[\"federated_server__isnull\"] = False\n        username = request.GET.get(\"username\")\n        if username:\n            filters[\"username__icontains\"] = username\n        scope = request.GET.get(\"scope\")\n        if scope:\n            filters[\"local\"] = scope == \"local\"\n\n        users = models.User.objects.filter(**filters)\n\n        sort = request.GET.get(\"sort\", \"-created_date\")\n        sort_fields = [\n            \"created_date\",\n            \"last_active_date\",\n            \"username\",\n            \"federated_server__server_name\",\n            \"is_active\",\n        ]\n        if sort in sort_fields + [\"-{:s}\".format(f) for f in sort_fields]:\n            users = users.order_by(sort)\n\n        paginated = Paginator(users, PAGE_LENGTH)\n        data = {\n            \"users\": paginated.get_page(request.GET.get(\"page\")),\n            \"sort\": sort,\n            \"server\": server,\n        }\n        return TemplateResponse(request, \"user_admin/user_admin.html\", data)\n\n\n@method_decorator(login_required, name=\"dispatch\")\n@method_decorator(\n    permission_required(\"bookwyrm.moderate_users\", raise_exception=True),\n    name=\"dispatch\",\n)\nclass UserAdmin(View):\n    \"\"\"moderate an individual user\"\"\"\n\n    def get(self, request, user):\n        \"\"\"user view\"\"\"\n        user = get_object_or_404(models.User, id=user)\n        data = {\"user\": user, \"group_form\": forms.UserGroupForm()}\n        return TemplateResponse(request, \"user_admin/user.html\", data)\n\n    def post(self, request, user):\n        \"\"\"update user group\"\"\"\n        user = get_object_or_404(models.User, id=user)\n        form = forms.UserGroupForm(request.POST, instance=user)\n        if form.is_valid():\n            form.save()\n        data = {\"user\": user, \"group_form\": form}\n        return TemplateResponse(request, \"user_admin/user.html\", data)\n", "path": "bookwyrm/views/user_admin.py"}]}