Skip to content

Commit

Permalink
Merge pull request #3693 from timgraham/get_foo_permission
Browse files Browse the repository at this point in the history
Removed usage of deprecated meta permission methods.
  • Loading branch information
yakky committed Jan 16, 2015
2 parents d6f0dc4 + 03759a4 commit d6b7906
Show file tree
Hide file tree
Showing 6 changed files with 45 additions and 42 deletions.
3 changes: 2 additions & 1 deletion cms/cms_toolbar.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
from django.core.urlresolvers import reverse, NoReverseMatch, resolve, Resolver404
from django.utils.translation import ugettext_lazy as _
from django.contrib import admin
from django.contrib.auth import get_permission_codename
from django.contrib.auth.models import User, AnonymousUser
from django.contrib.sites.models import Site

Expand Down Expand Up @@ -142,7 +143,7 @@ def add_users_button(self, parent):
if User in admin.site._registry:
opts = User._meta

if self.request.user.has_perm('%s.%s' % (opts.app_label, opts.get_change_permission())):
if self.request.user.has_perm('%s.%s' % (opts.app_label, get_permission_codename('change', opts))):
user_changelist_url = admin_reverse('%s_%s_changelist' % (opts.app_label, opts.model_name))
parent.add_sideframe_item(_('Users'), url=user_changelist_url)

Expand Down
23 changes: 11 additions & 12 deletions cms/forms/widgets.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

from itertools import chain

from django.contrib.auth import get_permission_codename
from django.contrib.sites.models import Site
from django.core.urlresolvers import NoReverseMatch, reverse_lazy
from django.forms.widgets import Select, MultiWidget, TextInput
Expand Down Expand Up @@ -38,11 +39,11 @@ def decompress(self, value):
return [site.pk, page.pk, page.pk]
site = Site.objects.get_current()
return [site.pk,None,None]

def _has_changed(self, initial, data):
# THIS IS A COPY OF django.forms.widgets.Widget._has_changed()
# (except for the first if statement)

"""
Return True if data differs from initial.
"""
Expand All @@ -60,11 +61,11 @@ def _has_changed(self, initial, data):
if force_unicode(initial_value) != force_unicode(data_value):
return True
return False

def render(self, name, value, attrs=None):
# THIS IS A COPY OF django.forms.widgets.MultiWidget.render()
# (except for the last line)

# value is a list of values, each corresponding to a widget
# in self.widgets.

Expand Down Expand Up @@ -121,7 +122,7 @@ def render(self, name, value, attrs=None):
})(django.jQuery);
</script>''' % {'name': name})
return mark_safe(self.format_output(output))

def format_output(self, rendered_widgets):
return u' '.join(rendered_widgets)

Expand Down Expand Up @@ -206,21 +207,21 @@ class UserSelectAdminWidget(Select):
"""Special widget used in page permission inlines, because we have to render
an add user (plus) icon, but point it somewhere else - to special user creation
view, which is accessible only if user haves "add user" permissions.
Current user should be assigned to widget in form constructor as an user
Current user should be assigned to widget in form constructor as an user
attribute.
"""
def render(self, name, value, attrs=None, choices=()):
output = [super(UserSelectAdminWidget, self).render(name, value, attrs, choices)]
output = [super(UserSelectAdminWidget, self).render(name, value, attrs, choices)]
if hasattr(self, 'user') and (self.user.is_superuser or \
self.user.has_perm(PageUser._meta.app_label + '.' + PageUser._meta.get_add_permission())):
self.user.has_perm(PageUser._meta.app_label + '.' + get_permission_codename('add', PageUser._meta))):
# append + icon
add_url = '../../../cms/pageuser/add/'
output.append(u'<a href="%s" class="add-another" id="add_id_%s" onclick="return showAddAnotherPopup(this);"> ' % \
(add_url, name))
output.append(u'<img src="%sicon_addlink.gif" width="10" height="10" alt="%s"/></a>' % (CMS_ADMIN_ICON_BASE, _('Add Another')))
return mark_safe(u''.join(output))


class AppHookSelect(Select):

Expand Down Expand Up @@ -266,5 +267,3 @@ def render_options(self, choices, selected_choices):
for option_value, option_label in chain(self.choices, choices):
output.append(self.render_option(selected_choices, option_value, option_label))
return '\n'.join(output)


5 changes: 3 additions & 2 deletions cms/models/pagemodel.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
from os.path import join

from django.utils.timezone import now
from django.contrib.auth import get_permission_codename
from django.contrib.sites.models import Site
from django.core.urlresolvers import reverse
from django.core.cache import cache
Expand Down Expand Up @@ -1005,7 +1006,7 @@ def has_change_permission(self, request, user=None):
user = request.user
if user.is_superuser:
return True
return (user.has_perm(opts.app_label + '.' + opts.get_change_permission())
return (user.has_perm(opts.app_label + '.' + get_permission_codename('change', opts))
and self.has_generic_permission(request, "change"))

def has_delete_permission(self, request, user=None):
Expand All @@ -1014,7 +1015,7 @@ def has_delete_permission(self, request, user=None):
user = request.user
if user.is_superuser:
return True
return (user.has_perm(opts.app_label + '.' + opts.get_delete_permission())
return (user.has_perm(opts.app_label + '.' + get_permission_codename('delete', opts))
and self.has_generic_permission(request, "delete"))

def has_publish_permission(self, request, user=None):
Expand Down
6 changes: 3 additions & 3 deletions cms/models/static_placeholder.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

from cms.utils.compat.dj import python_2_unicode_compatible
from cms.utils.copy_plugins import copy_plugins_to
from django.contrib.auth import get_permission_codename
from django.contrib.sites.models import Site
from django.core.exceptions import ValidationError
from django.db import models
Expand Down Expand Up @@ -74,12 +75,11 @@ def has_change_permission(self, request):
if request.user.is_superuser:
return True
opts = self._meta
return request.user.has_perm(opts.app_label + '.' + opts.get_change_permission())
return request.user.has_perm(opts.app_label + '.' + get_permission_codename('change', opts))

def has_publish_permission(self, request):
if request.user.is_superuser:
return True
opts = self._meta
return request.user.has_perm(opts.app_label + '.' + opts.get_change_permission()) and \
return request.user.has_perm(opts.app_label + '.' + get_permission_codename('change', opts)) and \
request.user.has_perm(opts.app_label + '.' + 'publish_page')

3 changes: 2 additions & 1 deletion cms/utils/admin.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
# -*- coding: utf-8 -*-
import json

from django.contrib.auth import get_permission_codename
from django.contrib.sites.models import Site
from django.http import HttpResponse
from django.shortcuts import render_to_response
Expand Down Expand Up @@ -66,7 +67,7 @@ def get_admin_menu_item_context(request, page, filtered=False, language=None):
global_add_perm = GlobalPagePermission.objects.user_has_add_permission(
request.user, page.site_id).exists()
request.user._global_add_perm_cache = global_add_perm
if request.user.has_perm(opts.app_label + '.' + opts.get_add_permission()) and global_add_perm:
if request.user.has_perm(opts.app_label + '.' + get_permission_codename('add', opts)) and global_add_perm:
has_add_on_same_level_permission = True
from cms.utils import permissions
if not has_add_on_same_level_permission and page.parent_id:
Expand Down
47 changes: 24 additions & 23 deletions cms/utils/permissions.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
# -*- coding: utf-8 -*-
from django.contrib.auth import get_permission_codename
from django.contrib.auth.models import Group
from django.contrib.sites.models import Site
from django.db.models import Q
Expand Down Expand Up @@ -38,10 +39,10 @@ def has_page_add_permission(request):
Return true if the current user has permission to add a new page. This is
just used for general add buttons - only superuser, or user with can_add in
globalpagepermission can add page.
Special case occur when page is going to be added from add page button in
change list - then we have target and position there, so check if user can
add page under target page will occur.
add page under target page will occur.
"""
opts = Page._meta
if request.user.is_superuser:
Expand All @@ -61,7 +62,7 @@ def has_page_add_permission(request):
return False
global_add_perm = GlobalPagePermission.objects.user_has_add_permission(
request.user, site).exists()
if (request.user.has_perm(opts.app_label + '.' + opts.get_add_permission())
if (request.user.has_perm(opts.app_label + '.' + get_permission_codename('add', opts))
and global_add_perm):
return True
if position in ("first-child", "last-child"):
Expand All @@ -72,7 +73,7 @@ def has_page_add_permission(request):
else:
global_add_perm = GlobalPagePermission.objects.user_has_add_permission(
request.user, site).exists()
if (request.user.has_perm(opts.app_label + '.' + opts.get_add_permission())
if (request.user.has_perm(opts.app_label + '.' + get_permission_codename('add', opts))
and global_add_perm):
return True
return False
Expand Down Expand Up @@ -103,7 +104,7 @@ def has_page_change_permission(request):
global_change_perm = GlobalPagePermission.objects.user_has_change_permission(
request.user, site).exists()
return request.user.is_superuser or (
request.user.has_perm(opts.app_label + '.' + opts.get_change_permission())
request.user.has_perm(opts.app_label + '.' + get_permission_codename('change', opts))
and global_change_perm or has_any_page_change_permissions(request))


Expand Down Expand Up @@ -143,21 +144,21 @@ def get_any_page_view_permissions(request, page):
def get_user_permission_level(user):
"""
Returns highest user level from the page/permission hierarchy on which
user haves can_change_permission. Also takes look into user groups. Higher
level equals to lover number. Users on top of hierarchy have level 0. Level
user haves can_change_permission. Also takes look into user groups. Higher
level equals to lover number. Users on top of hierarchy have level 0. Level
is the same like page.level attribute.
Example:
A,W level 0
/ \
user B,GroupE level 1
/ \
C,X D,Y,W level 2
Users A, W have user level 0. GroupE and all his users have user level 1
If user D is a member of GroupE, his user level will be 1, otherwise is
2.
"""
if (user.is_superuser or
GlobalPagePermission.objects.with_can_change_permissions(user).exists()):
Expand All @@ -175,29 +176,29 @@ def get_subordinate_users(user):
"""
Returns users queryset, containing all subordinate users to given user
including users created by given user and not assigned to any page.
Not assigned users must be returned, because they shouldn't get lost, and
user should still have possibility to see them.
user should still have possibility to see them.
Only users created_by given user which are on the same, or lover level are
returned.
If user haves global permissions or is a superuser, then he can see all the
users.
This function is currently used in PagePermissionInlineAdminForm for limit
users in permission combobox.
users in permission combobox.
Example:
A,W level 0
/ \
user B,GroupE level 1
Z / \
C,X D,Y,W level 2
Rules: W was created by user, Z was created by user, but is not assigned
to any page.
Will return [user, C, X, D, Y, Z]. W was created by user, but is also
assigned to higher level.
"""
Expand All @@ -212,7 +213,7 @@ def get_subordinate_users(user):
try:
user_level = get_user_permission_level(user)
except NoPermissionsException:
# no permission so only staff and no page permissions
# no permission so only staff and no page permissions
qs = get_user_model().objects.distinct().filter(
Q(is_staff=True) &
Q(pageuser__created_by=user) &
Expand Down Expand Up @@ -262,7 +263,7 @@ def has_global_change_permissions_permission(request):
opts = GlobalPagePermission._meta
user = request.user
if user.is_superuser or (
user.has_perm(opts.app_label + '.' + opts.get_change_permission()) and
user.has_perm(opts.app_label + '.' + get_permission_codename('change', opts)) and
has_global_page_permission(request, can_change=True)):
return True
return False
Expand All @@ -281,9 +282,9 @@ def has_generic_permission(page_id, user, attr, site):
def get_user_sites_queryset(user):
"""
Returns queryset of all sites available for given user.
1. For superuser always returns all sites.
2. For global user returns all sites he haves in global page permissions
2. For global user returns all sites he haves in global page permissions
together with any sites he is assigned to over an page.
3. For standard user returns just sites he is assigned to over pages.
"""
Expand Down

0 comments on commit d6b7906

Please sign in to comment.