Merge pull request #214 from mouse-reeve/user-permissions
Adds user permissions and groups
This commit is contained in:
commit
9bc6d7d6b6
@ -9,7 +9,7 @@
|
|||||||
<span>{% include 'snippets/book_titleby.html' with book=book %}</span>
|
<span>{% include 'snippets/book_titleby.html' with book=book %}</span>
|
||||||
</h2>
|
</h2>
|
||||||
|
|
||||||
{% if request.user.is_authenticated %}
|
{% if request.user.is_authenticated and perms.bookwyrm.edit_book %}
|
||||||
<div class="level-right">
|
<div class="level-right">
|
||||||
<a href="{{ book.id }}/edit">edit
|
<a href="{{ book.id }}/edit">edit
|
||||||
<span class="icon icon-pencil">
|
<span class="icon icon-pencil">
|
||||||
|
@ -70,12 +70,14 @@
|
|||||||
<a href="/user-edit" class="navbar-item">
|
<a href="/user-edit" class="navbar-item">
|
||||||
Settings
|
Settings
|
||||||
</a>
|
</a>
|
||||||
<a href="/invite" class="navbar-item">
|
|
||||||
Invites
|
|
||||||
</a>
|
|
||||||
<a href="/import" class="navbar-item">
|
<a href="/import" class="navbar-item">
|
||||||
Import books
|
Import books
|
||||||
</a>
|
</a>
|
||||||
|
{% if perms.bookwyrm.create_invites %}
|
||||||
|
<a href="/invite" class="navbar-item">
|
||||||
|
Invites
|
||||||
|
</a>
|
||||||
|
{% endif %}
|
||||||
<hr class="navbar-divider">
|
<hr class="navbar-divider">
|
||||||
<a href="/logout" class="navbar-item">
|
<a href="/logout" class="navbar-item">
|
||||||
Log out
|
Log out
|
||||||
|
@ -3,7 +3,7 @@ from io import BytesIO, TextIOWrapper
|
|||||||
from PIL import Image
|
from PIL import Image
|
||||||
|
|
||||||
from django.contrib.auth import authenticate, login, logout
|
from django.contrib.auth import authenticate, login, logout
|
||||||
from django.contrib.auth.decorators import login_required
|
from django.contrib.auth.decorators import login_required, permission_required
|
||||||
from django.core.files.base import ContentFile
|
from django.core.files.base import ContentFile
|
||||||
from django.http import HttpResponseBadRequest, HttpResponseNotFound
|
from django.http import HttpResponseBadRequest, HttpResponseNotFound
|
||||||
from django.shortcuts import redirect
|
from django.shortcuts import redirect
|
||||||
@ -187,6 +187,7 @@ def resolve_book(request):
|
|||||||
|
|
||||||
|
|
||||||
@login_required
|
@login_required
|
||||||
|
@permission_required('bookwyrm.edit_book', raise_exception=True)
|
||||||
def edit_book(request, book_id):
|
def edit_book(request, book_id):
|
||||||
''' edit a book cool '''
|
''' edit a book cool '''
|
||||||
if not request.method == 'POST':
|
if not request.method == 'POST':
|
||||||
@ -479,7 +480,9 @@ def import_data(request):
|
|||||||
return redirect('/import_status/%d' % (job.id,))
|
return redirect('/import_status/%d' % (job.id,))
|
||||||
return HttpResponseBadRequest()
|
return HttpResponseBadRequest()
|
||||||
|
|
||||||
|
|
||||||
@login_required
|
@login_required
|
||||||
|
@permission_required('bookwyrm.create_invites', raise_exception=True)
|
||||||
def create_invite(request):
|
def create_invite(request):
|
||||||
''' creates a user invite database entry '''
|
''' creates a user invite database entry '''
|
||||||
form = forms.CreateInviteForm(request.POST)
|
form = forms.CreateInviteForm(request.POST)
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
''' views for pages you can go to in the application '''
|
''' views for pages you can go to in the application '''
|
||||||
import re
|
import re
|
||||||
|
|
||||||
from django.contrib.auth.decorators import login_required
|
from django.contrib.auth.decorators import login_required, permission_required
|
||||||
from django.db.models import Avg, Count, Q
|
from django.db.models import Avg, Count, Q
|
||||||
from django.http import HttpResponseBadRequest, HttpResponseNotFound,\
|
from django.http import HttpResponseBadRequest, HttpResponseNotFound,\
|
||||||
JsonResponse
|
JsonResponse
|
||||||
@ -246,6 +246,7 @@ def invite_page(request, code):
|
|||||||
return TemplateResponse(request, 'invite.html', data)
|
return TemplateResponse(request, 'invite.html', data)
|
||||||
|
|
||||||
@login_required
|
@login_required
|
||||||
|
@permission_required('bookwyrm.create_invites', raise_exception=True)
|
||||||
def manage_invites(request):
|
def manage_invites(request):
|
||||||
''' invite management page '''
|
''' invite management page '''
|
||||||
data = {
|
data = {
|
||||||
@ -471,6 +472,7 @@ def book_page(request, book_id):
|
|||||||
|
|
||||||
|
|
||||||
@login_required
|
@login_required
|
||||||
|
@permission_required('bookwyrm.edit_book', raise_exception=True)
|
||||||
def edit_book_page(request, book_id):
|
def edit_book_page(request, book_id):
|
||||||
''' info about a book '''
|
''' info about a book '''
|
||||||
book = books_manager.get_edition(book_id)
|
book = books_manager.get_edition(book_id)
|
||||||
|
74
init_db.py
74
init_db.py
@ -1,24 +1,60 @@
|
|||||||
''' starter data '''
|
''' starter data '''
|
||||||
|
from django.contrib.auth.models import Group, Permission
|
||||||
|
from django.contrib.contenttypes.models import ContentType
|
||||||
|
|
||||||
from bookwyrm.models import Connector, User
|
from bookwyrm.models import Connector, User
|
||||||
from bookwyrm.settings import DOMAIN
|
from bookwyrm.settings import DOMAIN
|
||||||
|
|
||||||
User.objects.create_user('mouse', 'mouse.reeve@gmail.com', 'password123')
|
|
||||||
User.objects.create_user(
|
|
||||||
'rat', 'rat@rat.com', 'ratword',
|
|
||||||
manually_approves_followers=True
|
|
||||||
)
|
|
||||||
|
|
||||||
User.objects.get(id=1).followers.add(User.objects.get(id=2))
|
groups = ['admin', 'moderator', 'editor']
|
||||||
|
for group in groups:
|
||||||
|
Group.objects.create(name=group)
|
||||||
|
|
||||||
Connector.objects.create(
|
permissions = [{
|
||||||
identifier='openlibrary.org',
|
'codename': 'edit_instance_settings',
|
||||||
name='OpenLibrary',
|
'name': 'change the instance info',
|
||||||
connector_file='openlibrary',
|
'groups': ['admin',]
|
||||||
base_url='https://openlibrary.org',
|
}, {
|
||||||
books_url='https://openlibrary.org',
|
'codename': 'set_user_group',
|
||||||
covers_url='https://covers.openlibrary.org',
|
'name': 'change what group a user is in',
|
||||||
search_url='https://openlibrary.org/search?q=',
|
'groups': ['admin', 'moderator']
|
||||||
|
}, {
|
||||||
|
'codename': 'control_federation',
|
||||||
|
'name': 'control who to federate with',
|
||||||
|
'groups': ['admin', 'moderator']
|
||||||
|
}, {
|
||||||
|
'codename': 'create_invites',
|
||||||
|
'name': 'issue invitations to join',
|
||||||
|
'groups': ['admin', 'moderator']
|
||||||
|
}, {
|
||||||
|
'codename': 'moderate_user',
|
||||||
|
'name': 'deactivate or silence a user',
|
||||||
|
'groups': ['admin', 'moderator']
|
||||||
|
}, {
|
||||||
|
'codename': 'moderate_post',
|
||||||
|
'name': 'delete other users\' posts',
|
||||||
|
'groups': ['admin', 'moderator']
|
||||||
|
}, {
|
||||||
|
'codename': 'edit_book',
|
||||||
|
'name': 'edit book info',
|
||||||
|
'groups': ['admin', 'moderator', 'editor']
|
||||||
|
}]
|
||||||
|
|
||||||
|
content_type = ContentType.objects.get_for_model(User)
|
||||||
|
for permission in permissions:
|
||||||
|
permission_obj = Permission.objects.create(
|
||||||
|
codename=permission['codename'],
|
||||||
|
name=permission['name'],
|
||||||
|
content_type=content_type,
|
||||||
)
|
)
|
||||||
|
# add the permission to the appropriate groups
|
||||||
|
for group_name in permission['groups']:
|
||||||
|
Group.objects.get(name=group_name).permissions.add(permission_obj)
|
||||||
|
|
||||||
|
# while the groups and permissions shouldn't be changed because the code
|
||||||
|
# depends on them, what permissions go with what groups should be editable
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
Connector.objects.create(
|
Connector.objects.create(
|
||||||
identifier=DOMAIN,
|
identifier=DOMAIN,
|
||||||
@ -31,3 +67,13 @@ Connector.objects.create(
|
|||||||
search_url='https://%s/search?q=' % DOMAIN,
|
search_url='https://%s/search?q=' % DOMAIN,
|
||||||
priority=1,
|
priority=1,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
Connector.objects.create(
|
||||||
|
identifier='openlibrary.org',
|
||||||
|
name='OpenLibrary',
|
||||||
|
connector_file='openlibrary',
|
||||||
|
base_url='https://openlibrary.org',
|
||||||
|
books_url='https://openlibrary.org',
|
||||||
|
covers_url='https://covers.openlibrary.org',
|
||||||
|
search_url='https://openlibrary.org/search?q=',
|
||||||
|
)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user