# HG changeset patch # User verrierj # Date 1323689178 -3600 # Node ID ee792e43b36a34dfea8a7094ed4aa9949e925b3f # Parent a14509d74e13fe92a432c7655d77d611da2e2d9e Replace is_regular field in userprofile by django permission diff -r a14509d74e13 -r ee792e43b36a src/ldt/ldt/ldt_utils/middleware/userprofile.py --- a/src/ldt/ldt/ldt_utils/middleware/userprofile.py Mon Dec 12 10:19:04 2011 +0100 +++ b/src/ldt/ldt/ldt_utils/middleware/userprofile.py Mon Dec 12 12:26:18 2011 +0100 @@ -7,7 +7,6 @@ if request.user.is_authenticated(): profile = request.user.get_profile() - request.user.is_regular = profile.is_regular language = profile.language else: language = settings.LANGUAGE_CODE[:2] diff -r a14509d74e13 -r ee792e43b36a src/ldt/ldt/ldt_utils/templates/ldt/ldt_utils/create_group.html --- a/src/ldt/ldt/ldt_utils/templates/ldt/ldt_utils/create_group.html Mon Dec 12 10:19:04 2011 +0100 +++ b/src/ldt/ldt/ldt_utils/templates/ldt/ldt_utils/create_group.html Mon Dec 12 12:26:18 2011 +0100 @@ -108,13 +108,16 @@
{% trans "remove all" %} + + {% if is_owner_group %} | {% trans "is admin" %} | {% trans "is not admin" %} + {% endif %}
@@ -134,7 +137,9 @@ {% if group_id %} - + {% if is_owner_group %} + + {% endif %} {% else %} {% endif %} diff -r a14509d74e13 -r ee792e43b36a src/ldt/ldt/ldt_utils/templates/ldt/ldt_utils/groups.html --- a/src/ldt/ldt/ldt_utils/templates/ldt/ldt_utils/groups.html Mon Dec 12 10:19:04 2011 +0100 +++ b/src/ldt/ldt/ldt_utils/templates/ldt/ldt_utils/groups.html Mon Dec 12 12:26:18 2011 +0100 @@ -86,7 +86,7 @@
{% trans "My groups" %}
- {% if user.is_regular %} + {% if perms.auth.add_group %} {% trans 'Create group' %} {% endif %}
diff -r a14509d74e13 -r ee792e43b36a src/ldt/ldt/ldt_utils/templates/ldt/ldt_utils/partial/groupslist.html --- a/src/ldt/ldt/ldt_utils/templates/ldt/ldt_utils/partial/groupslist.html Mon Dec 12 10:19:04 2011 +0100 +++ b/src/ldt/ldt/ldt_utils/templates/ldt/ldt_utils/partial/groupslist.html Mon Dec 12 12:26:18 2011 +0100 @@ -9,15 +9,10 @@ {% for group in groups %} - - {% if user.is_regular %} - {% if group.change %} - c - {{ group.name }} - {% else %} - l - {{ group.name }} - {% endif %} + + {% if group.change %} + c + {{ group.name }} {% else %} {{ group.name }} diff -r a14509d74e13 -r ee792e43b36a src/ldt/ldt/ldt_utils/urls.py --- a/src/ldt/ldt/ldt_utils/urls.py Mon Dec 12 10:19:04 2011 +0100 +++ b/src/ldt/ldt/ldt_utils/urls.py Mon Dec 12 12:26:18 2011 +0100 @@ -40,7 +40,6 @@ url(r'^segmentHighlight/(?P.*)/(?P.*)/(?P.*)/(?P.*)/(?P.*)/$', 'views.highlight_segment'), url(r'^createGroup/$', 'views.create_group'), url(r'^updateGroup/(?P.*)$', 'views.update_group'), - url(r'^leaveGroup/(?P.*)$', 'views.leave_group'), ) urlpatterns += patterns('', diff -r a14509d74e13 -r ee792e43b36a src/ldt/ldt/ldt_utils/views.py --- a/src/ldt/ldt/ldt_utils/views.py Mon Dec 12 10:19:04 2011 +0100 +++ b/src/ldt/ldt/ldt_utils/views.py Mon Dec 12 12:26:18 2011 +0100 @@ -1285,8 +1285,9 @@ @login_required def create_group(request): - if not request.user.is_regular: - return HttpResponseServerError('

User can not leave a group.

') + if not request.user.has_perm('auth.add_group'): + return HttpResponseServerError('

User %s can not create a group.

' % request.user.username) + query = Q(id=settings.ANONYMOUS_USER_ID) | Q(id=request.user.id) | Q(is_superuser=True) user_list = User.objects.exclude(query)[0:20] user_list = [{'name': x.username, 'id': x.id, 'type': 'user'} for x in user_list] @@ -1302,6 +1303,7 @@ group = Group.objects.create(name=name) group.save() + assign('is_owner_group', request.user, group) assign('change_group', request.user, group) request.user.groups.add(group) @@ -1320,29 +1322,28 @@ @login_required def update_group(request, group_id): - if not request.user.is_regular: - return HttpResponseServerError('

User can not update a group.

') + group = get_object_or_404(Group, id=group_id) + checker = ObjectPermissionChecker(request.user) - group = get_object_or_404(Group, id=group_id) - - if not request.user.has_perm('change_group', group): + if not checker.has_perm('change_group', group): form_status = 'saved' return render_to_response("ldt/ldt_utils/create_group.html", {'form_status' : form_status}, context_instance=RequestContext(request)) query = Q(id=settings.ANONYMOUS_USER_ID) | Q(id=request.user.id) | Q(is_superuser=True) user_list = User.objects.exclude(query)[0:20] user_list = [{'name': x.username, 'id': x.id, 'type': 'user'} for x in user_list] - form_status = '' + form_status = '' + is_owner_group = checker.has_perm('is_owner_group', group) if request.method == "POST": form = GroupAddForm(request.POST, instance=group) submit_action = request.REQUEST.get("submit_button", False) if submit_action == 'delete': - remove_perm('change_group', request.user, group) - group.delete() - form_status = 'deleted' - else: + if is_owner_group: + group.delete() + form_status = 'deleted' + else: if form.is_valid(): name = form.cleaned_data['name'] new_member_list = form.cleaned_data['read_list'] @@ -1355,11 +1356,12 @@ raise AttributeError('new_member_list should only contain users') if user != request.user: group.user_set.add(user) - if user in admin_list: - assign('change_group', user, group) - else: - remove_perm('change_group', user, group) - + if is_owner_group: + if user in admin_list: + assign('change_group', user, group) + else: + remove_perm('change_group', user, group) + for user in old_member_list: if user not in new_member_list: group.user_set.remove(user) @@ -1373,23 +1375,6 @@ member_list, admin_list = get_userlist_group(group, request.user) return render_to_response("ldt/ldt_utils/create_group.html", {'group_id' : group_id, 'form' : form, 'form_status' : form_status, - 'elem_list' : user_list, 'member_list': member_list, 'admin_list': admin_list}, - context_instance=RequestContext(request)) + 'elem_list' : user_list, 'member_list': member_list, 'admin_list': admin_list, + 'is_owner_group': is_owner_group}, context_instance=RequestContext(request)) -@login_required -def leave_group(request, group_id, redirect=True): - if not request.user.is_regular: - return HttpResponseServerError('

User can not leave a group.

') - - group = get_object_or_404(Group, id=group_id) - redirect = boolean_convert(redirect) - - if not request.user.has_perm('change_group', group): - request.user.groups.remove(group) - - if redirect: - return HttpResponseRedirect(reverse('ldt.ldt_utils.views.groups')) - else: - return HttpResponse(simplejson.dumps({'res':True}, ensure_ascii=False), mimetype='application/json') - - diff -r a14509d74e13 -r ee792e43b36a src/ldt/ldt/user/migrations/0005_add_user_permission.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/ldt/ldt/user/migrations/0005_add_user_permission.py Mon Dec 12 12:26:18 2011 +0100 @@ -0,0 +1,75 @@ +#@PydevCodeAnalysisIgnore +# encoding: utf-8 +import datetime +from south.db import db +from south.v2 import DataMigration +from django.db import models +from django.contrib.auth.models import User +from ldt.user.models import UserProfile +from django.contrib.auth.models import Group, Permission +from django.contrib.contenttypes.models import ContentType + + +class Migration(DataMigration): + + def forwards(self, orm): + content_type = ContentType.objects.get(app_label='auth', model='group') + permission = Permission.objects.create(codename='is_owner_group', + name='Can delete and administrate a group', + content_type=content_type) + + + def backwards(self, orm): + "Write your backwards methods here." + + + models = { + 'auth.group': { + 'Meta': {'object_name': 'Group'}, + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}), + 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}) + }, + 'auth.permission': { + 'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'}, + 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'}) + }, + 'auth.user': { + 'Meta': {'object_name': 'User'}, + 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}), + 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}), + 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), + 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}), + 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}), + 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}), + 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'}) + }, + 'contenttypes.contenttype': { + 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"}, + 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}) + }, + 'user.ldt': { + 'Meta': {'object_name': 'Ldt', '_ormbases': ['auth.User']}, + 'user_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['auth.User']", 'unique': 'True', 'primary_key': 'True'}) + }, + 'user.userprofile': { + 'Meta': {'object_name': 'UserProfile'}, + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'language': ('django.db.models.fields.CharField', [], {'default': "'fr'", 'max_length': '2'}), + 'user': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['auth.User']", 'unique': 'True'}) + } + } + + complete_apps = ['user'] diff -r a14509d74e13 -r ee792e43b36a src/ldt/ldt/user/migrations/0005_auto__add_field_userprofile_is_regular.py --- a/src/ldt/ldt/user/migrations/0005_auto__add_field_userprofile_is_regular.py Mon Dec 12 10:19:04 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,71 +0,0 @@ -# encoding: utf-8 -import datetime -from south.db import db -from south.v2 import SchemaMigration -from django.db import models - -class Migration(SchemaMigration): - - def forwards(self, orm): - - # Adding field 'UserProfile.is_regular' - db.add_column('user_userprofile', 'is_regular', self.gf('django.db.models.fields.BooleanField')(default=False), keep_default=False) - - - def backwards(self, orm): - - # Deleting field 'UserProfile.is_regular' - db.delete_column('user_userprofile', 'is_regular') - - - models = { - 'auth.group': { - 'Meta': {'object_name': 'Group'}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}), - 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}) - }, - 'auth.permission': { - 'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'}, - 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}), - 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'}) - }, - 'auth.user': { - 'Meta': {'object_name': 'User'}, - 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), - 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}), - 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}), - 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), - 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), - 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}), - 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}), - 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}), - 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'}) - }, - 'contenttypes.contenttype': { - 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"}, - 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}) - }, - 'user.ldt': { - 'Meta': {'object_name': 'Ldt', '_ormbases': ['auth.User']}, - 'user_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['auth.User']", 'unique': 'True', 'primary_key': 'True'}) - }, - 'user.userprofile': { - 'Meta': {'object_name': 'UserProfile'}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'is_regular': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'language': ('django.db.models.fields.CharField', [], {'default': "'fr'", 'max_length': '2'}), - 'user': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['auth.User']", 'unique': 'True'}) - } - } - - complete_apps = ['user'] diff -r a14509d74e13 -r ee792e43b36a src/ldt/ldt/user/models.py --- a/src/ldt/ldt/user/models.py Mon Dec 12 10:19:04 2011 +0100 +++ b/src/ldt/ldt/user/models.py Mon Dec 12 12:26:18 2011 +0100 @@ -3,10 +3,9 @@ from django.contrib.auth.models import User, UserManager, Group from django.db import models from django.db.models.signals import post_save -from django.utils.translation import ugettext as _ import datetime - + class Ldt(User): # irigroups = models.ManyToManyField(IriGroup, blank=True) @@ -35,13 +34,12 @@ class UserProfile (models.Model): user = models.OneToOneField(User) language = models.CharField(max_length=2, default=settings.LANGUAGE_CODE[:2]) - is_regular = models.BooleanField(default=False, help_text=_("Designates whether the user can create and leave groups.")) @staticmethod def create_user_profile(sender, instance, created, **kwargs): if created: UserProfile.objects.create(user=instance) - + post_save.connect(UserProfile.create_user_profile, sender=User)