mirror of
https://github.com/ae-utbm/sith.git
synced 2025-07-10 03:49:24 +00:00
Club model implementation, various other changes
This commit is contained in:
@ -6,6 +6,7 @@ from django.conf import settings
|
||||
|
||||
from core.models import Group, User, Page, PageRev
|
||||
from accounting.models import Customer, GeneralJournal, ProductType, Product
|
||||
from club.models import Club
|
||||
|
||||
class Command(BaseCommand):
|
||||
help = "Set up a new instance of the Sith AE"
|
||||
@ -28,6 +29,10 @@ class Command(BaseCommand):
|
||||
u.save()
|
||||
for g in settings.AE_GROUPS.values():
|
||||
Group(id=g['id'], name=g['name']).save()
|
||||
Club(name=settings.AE_MAIN_CLUB['name'], unix_name=settings.AE_MAIN_CLUB['unix_name'],
|
||||
address=settings.AE_MAIN_CLUB['address']).save()
|
||||
|
||||
# Here we add a lot of test datas, that are not necessary for the Sith, but that provide a basic development environment
|
||||
if not options['prod']:
|
||||
print("Dev mode, adding some test data")
|
||||
s = User(username='skia', last_name="Kia", first_name="S'",
|
||||
|
@ -2,10 +2,9 @@
|
||||
from __future__ import unicode_literals
|
||||
|
||||
from django.db import migrations, models
|
||||
import django.utils.timezone
|
||||
import django.core.validators
|
||||
import django.db.models.deletion
|
||||
from django.conf import settings
|
||||
import django.db.models.deletion
|
||||
import django.contrib.auth.models
|
||||
|
||||
|
||||
@ -19,19 +18,19 @@ class Migration(migrations.Migration):
|
||||
migrations.CreateModel(
|
||||
name='User',
|
||||
fields=[
|
||||
('id', models.AutoField(primary_key=True, serialize=False, auto_created=True, verbose_name='ID')),
|
||||
('password', models.CharField(verbose_name='password', max_length=128)),
|
||||
('last_login', models.DateTimeField(null=True, blank=True, verbose_name='last login')),
|
||||
('id', models.AutoField(serialize=False, auto_created=True, primary_key=True, verbose_name='ID')),
|
||||
('password', models.CharField(max_length=128, verbose_name='password')),
|
||||
('last_login', models.DateTimeField(blank=True, verbose_name='last login', null=True)),
|
||||
('is_superuser', models.BooleanField(help_text='Designates that this user has all permissions without explicitly assigning them.', default=False, verbose_name='superuser status')),
|
||||
('username', models.CharField(error_messages={'unique': 'A user with that username already exists.'}, help_text='Required. 254 characters or fewer. Letters, digits and @/./+/-/_ only.', max_length=254, validators=[django.core.validators.RegexValidator('^[\\w.@+-]+$', 'Enter a valid username. This value may contain only letters, numbers and @/./+/-/_ characters.')], unique=True, verbose_name='username')),
|
||||
('first_name', models.CharField(verbose_name='first name', max_length=30)),
|
||||
('last_name', models.CharField(verbose_name='last name', max_length=30)),
|
||||
('email', models.EmailField(unique=True, verbose_name='email address', max_length=254)),
|
||||
('date_of_birth', models.DateTimeField(verbose_name='date of birth')),
|
||||
('nick_name', models.CharField(blank=True, max_length=30)),
|
||||
('username', models.CharField(max_length=254, verbose_name='username', unique=True, help_text='Required. 254 characters or fewer. Letters, digits and @/./+/-/_ only.', validators=[django.core.validators.RegexValidator('^[\\w.@+-]+$', 'Enter a valid username. This value may contain only letters, numbers and @/./+/-/_ characters.')], error_messages={'unique': 'A user with that username already exists.'})),
|
||||
('first_name', models.CharField(max_length=30, verbose_name='first name')),
|
||||
('last_name', models.CharField(max_length=30, verbose_name='last name')),
|
||||
('email', models.EmailField(max_length=254, verbose_name='email address', unique=True)),
|
||||
('date_of_birth', models.DateField(verbose_name='date of birth')),
|
||||
('nick_name', models.CharField(max_length=30, blank=True)),
|
||||
('is_staff', models.BooleanField(help_text='Designates whether the user can log into this admin site.', default=False, verbose_name='staff status')),
|
||||
('is_active', models.BooleanField(help_text='Designates whether this user should be treated as active. Unselect this instead of deleting accounts.', default=True, verbose_name='active')),
|
||||
('date_joined', models.DateTimeField(default=django.utils.timezone.now, verbose_name='date joined')),
|
||||
('date_joined', models.DateField(auto_now_add=True, verbose_name='date joined')),
|
||||
],
|
||||
options={
|
||||
'verbose_name_plural': 'users',
|
||||
@ -45,20 +44,20 @@ class Migration(migrations.Migration):
|
||||
migrations.CreateModel(
|
||||
name='Group',
|
||||
fields=[
|
||||
('group_ptr', models.OneToOneField(primary_key=True, to='auth.Group', parent_link=True, serialize=False, auto_created=True)),
|
||||
('group_ptr', models.OneToOneField(serialize=False, primary_key=True, parent_link=True, to='auth.Group', auto_created=True)),
|
||||
],
|
||||
bases=('auth.group',),
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='Page',
|
||||
fields=[
|
||||
('id', models.AutoField(primary_key=True, serialize=False, auto_created=True, verbose_name='ID')),
|
||||
('name', models.CharField(verbose_name='page name', max_length=30)),
|
||||
('full_name', models.CharField(blank=True, verbose_name='page name', max_length=255)),
|
||||
('edit_group', models.ManyToManyField(blank=True, to='core.Group', related_name='editable_page')),
|
||||
('owner_group', models.ForeignKey(to='core.Group', default=1, related_name='owned_page')),
|
||||
('parent', models.ForeignKey(null=True, to='core.Page', on_delete=django.db.models.deletion.SET_NULL, blank=True, related_name='children')),
|
||||
('view_group', models.ManyToManyField(blank=True, to='core.Group', related_name='viewable_page')),
|
||||
('id', models.AutoField(serialize=False, auto_created=True, primary_key=True, verbose_name='ID')),
|
||||
('name', models.CharField(max_length=30, verbose_name='page name')),
|
||||
('_full_name', models.CharField(max_length=255, verbose_name='page name', blank=True)),
|
||||
('edit_group', models.ManyToManyField(to='core.Group', related_name='editable_page', blank=True)),
|
||||
('owner_group', models.ForeignKey(to='core.Group', related_name='owned_page', default=1)),
|
||||
('parent', models.ForeignKey(to='core.Page', on_delete=django.db.models.deletion.SET_NULL, null=True, related_name='children', blank=True)),
|
||||
('view_group', models.ManyToManyField(to='core.Group', related_name='viewable_page', blank=True)),
|
||||
],
|
||||
options={
|
||||
'permissions': (('change_prop_page', "Can change the page's properties (groups, ...)"), ('view_page', 'Can view the page')),
|
||||
@ -67,10 +66,10 @@ class Migration(migrations.Migration):
|
||||
migrations.CreateModel(
|
||||
name='PageRev',
|
||||
fields=[
|
||||
('id', models.AutoField(primary_key=True, serialize=False, auto_created=True, verbose_name='ID')),
|
||||
('title', models.CharField(blank=True, verbose_name='page title', max_length=255)),
|
||||
('content', models.TextField(blank=True, verbose_name='page content')),
|
||||
('date', models.DateTimeField(verbose_name='date', auto_now=True)),
|
||||
('id', models.AutoField(serialize=False, auto_created=True, primary_key=True, verbose_name='ID')),
|
||||
('title', models.CharField(max_length=255, verbose_name='page title', blank=True)),
|
||||
('content', models.TextField(verbose_name='page content', blank=True)),
|
||||
('date', models.DateTimeField(auto_now=True, verbose_name='date')),
|
||||
('author', models.ForeignKey(related_name='page_rev', to=settings.AUTH_USER_MODEL)),
|
||||
('page', models.ForeignKey(related_name='revisions', to='core.Page')),
|
||||
],
|
||||
@ -81,27 +80,27 @@ class Migration(migrations.Migration):
|
||||
migrations.AddField(
|
||||
model_name='user',
|
||||
name='edit_group',
|
||||
field=models.ManyToManyField(blank=True, to='core.Group', related_name='editable_user'),
|
||||
field=models.ManyToManyField(to='core.Group', related_name='editable_user', blank=True),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='user',
|
||||
name='groups',
|
||||
field=models.ManyToManyField(help_text='The groups this user belongs to. A user will get all permissions granted to each of their groups.', to='auth.Group', blank=True, verbose_name='groups', related_query_name='user', related_name='user_set'),
|
||||
field=models.ManyToManyField(to='auth.Group', related_query_name='user', verbose_name='groups', related_name='user_set', help_text='The groups this user belongs to. A user will get all permissions granted to each of their groups.', blank=True),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='user',
|
||||
name='owner_group',
|
||||
field=models.ForeignKey(to='core.Group', default=1, related_name='owned_user'),
|
||||
field=models.ForeignKey(to='core.Group', related_name='owned_user', default=1),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='user',
|
||||
name='user_permissions',
|
||||
field=models.ManyToManyField(help_text='Specific permissions for this user.', to='auth.Permission', blank=True, verbose_name='user permissions', related_query_name='user', related_name='user_set'),
|
||||
field=models.ManyToManyField(to='auth.Permission', related_query_name='user', verbose_name='user permissions', related_name='user_set', help_text='Specific permissions for this user.', blank=True),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='user',
|
||||
name='view_group',
|
||||
field=models.ManyToManyField(blank=True, to='core.Group', related_name='viewable_user'),
|
||||
field=models.ManyToManyField(to='core.Group', related_name='viewable_user', blank=True),
|
||||
),
|
||||
migrations.AlterUniqueTogether(
|
||||
name='page',
|
||||
|
@ -1,19 +0,0 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
from __future__ import unicode_literals
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('core', '0001_initial'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterField(
|
||||
model_name='user',
|
||||
name='date_joined',
|
||||
field=models.DateTimeField(auto_now_add=True, verbose_name='date joined'),
|
||||
),
|
||||
]
|
@ -1,19 +0,0 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
from __future__ import unicode_literals
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('core', '0002_auto_20151215_0827'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.RenameField(
|
||||
model_name='page',
|
||||
old_name='full_name',
|
||||
new_name='_full_name',
|
||||
),
|
||||
]
|
@ -1,19 +0,0 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
from __future__ import unicode_literals
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('core', '0003_auto_20160111_0900'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterField(
|
||||
model_name='user',
|
||||
name='date_of_birth',
|
||||
field=models.DateField(verbose_name='date of birth'),
|
||||
),
|
||||
]
|
@ -1,19 +0,0 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
from __future__ import unicode_literals
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('core', '0004_auto_20160128_0835'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterField(
|
||||
model_name='user',
|
||||
name='date_joined',
|
||||
field=models.DateField(auto_now_add=True, verbose_name='date joined'),
|
||||
),
|
||||
]
|
@ -160,13 +160,12 @@ class User(AbstractBaseUser, PermissionsMixin):
|
||||
"""
|
||||
Determine if the object can be edited by the user
|
||||
"""
|
||||
if not hasattr(obj, "edit_group"):
|
||||
return False
|
||||
if self.is_owner(obj):
|
||||
return True
|
||||
for g in obj.edit_group.all():
|
||||
if self.groups.filter(name=g.name).exists():
|
||||
return True
|
||||
if hasattr(obj, "edit_group"):
|
||||
for g in obj.edit_group.all():
|
||||
if self.groups.filter(name=g.name).exists():
|
||||
return True
|
||||
if isinstance(obj, User) and obj == self:
|
||||
return True
|
||||
if self.has_perm(obj.__class__.__module__.split('.')[0]+".change_"+obj.__class__.__name__.lower()):
|
||||
@ -177,13 +176,12 @@ class User(AbstractBaseUser, PermissionsMixin):
|
||||
"""
|
||||
Determine if the object can be viewed by the user
|
||||
"""
|
||||
if not hasattr(obj, "view_group"):
|
||||
return False
|
||||
if self.can_edit(obj):
|
||||
return True
|
||||
for g in obj.view_group.all():
|
||||
if self.groups.filter(name=g.name).exists():
|
||||
return True
|
||||
if hasattr(obj, "view_group"):
|
||||
for g in obj.view_group.all():
|
||||
if self.groups.filter(name=g.name).exists():
|
||||
return True
|
||||
if self.has_perm(obj.__class__.__module__.split('.')[0]+".view_"+obj.__class__.__name__.lower()):
|
||||
return True
|
||||
return False
|
||||
|
@ -42,6 +42,7 @@ class CanEditMixin(View):
|
||||
try: # Always unlock when 403
|
||||
self.object.unset_lock()
|
||||
except: pass
|
||||
print("CanEditMixin 403")
|
||||
raise PermissionDenied
|
||||
|
||||
class CanViewMixin(View):
|
||||
@ -56,6 +57,7 @@ class CanViewMixin(View):
|
||||
try: # Always unlock when 403
|
||||
self.object.unset_lock()
|
||||
except: pass
|
||||
print("CanViewMixin 403")
|
||||
raise PermissionDenied
|
||||
|
||||
from .user import *
|
||||
|
@ -3,15 +3,16 @@ from django.views.generic import ListView
|
||||
|
||||
from core.models import Group
|
||||
from core.views.forms import GroupEditForm
|
||||
from core.views import CanEditMixin
|
||||
|
||||
class GroupListView(ListView):
|
||||
class GroupListView(CanEditMixin, ListView):
|
||||
"""
|
||||
Displays the group list
|
||||
"""
|
||||
model = Group
|
||||
template_name = "core/group_list.html"
|
||||
|
||||
class GroupEditView(UpdateView):
|
||||
class GroupEditView(CanEditMixin, UpdateView):
|
||||
model = Group
|
||||
pk_url_kwarg = "group_id"
|
||||
template_name = "core/group_edit.html"
|
||||
|
Reference in New Issue
Block a user