Renamed 'permission_required' to 'required_permission' etc.
Renamed method and attribute of openslides.utils.views.PermissionMixin. Renamed attribute of widgets and main menu entries. Fixed #1160.
This commit is contained in:
parent
2cd0a2007d
commit
b16641c0dc
@ -39,6 +39,7 @@ Other:
|
||||
- Renamed config api classes. Changed permission system for config pages.
|
||||
- Regrouped config collections and pages.
|
||||
- Renamed some classes of the poll api.
|
||||
- Renamed method and attribute of openslides.utils.views.PermissionMixin.
|
||||
- Added api for absolute urls in models.
|
||||
- Inserted command line option to translate config strings during database setup.
|
||||
- Enhanced http error pages.
|
||||
|
@ -10,7 +10,7 @@ class AgendaMainMenuEntry(MainMenuEntry):
|
||||
Main menu entry for the agenda app.
|
||||
"""
|
||||
verbose_name = ugettext_lazy('Agenda')
|
||||
permission_required = 'agenda.can_see_agenda'
|
||||
required_permission = 'agenda.can_see_agenda'
|
||||
default_weight = 20
|
||||
pattern_name = 'item_overview'
|
||||
icon_css_class = 'icon-calendar'
|
||||
|
@ -49,7 +49,7 @@ class Overview(TemplateView):
|
||||
"""
|
||||
Show all agenda items, and update their range via post.
|
||||
"""
|
||||
permission_required = 'agenda.can_see_agenda'
|
||||
required_permission = 'agenda.can_see_agenda'
|
||||
template_name = 'agenda/overview.html'
|
||||
|
||||
def get_context_data(self, **kwargs):
|
||||
@ -172,15 +172,15 @@ class AgendaItemView(SingleObjectMixin, FormView):
|
||||
context_object_name = 'item'
|
||||
form_class = AppendSpeakerForm
|
||||
|
||||
def has_permission(self, request, *args, **kwargs):
|
||||
def check_permission(self, request, *args, **kwargs):
|
||||
"""
|
||||
Checks if the user has the required permission.
|
||||
"""
|
||||
if self.get_object().type == Item.ORGANIZATIONAL_ITEM:
|
||||
permission = request.user.has_perm('agenda.can_see_orga_items')
|
||||
check_permission = request.user.has_perm('agenda.can_see_orga_items')
|
||||
else:
|
||||
permission = request.user.has_perm('agenda.can_see_agenda')
|
||||
return permission
|
||||
check_permission = request.user.has_perm('agenda.can_see_agenda')
|
||||
return check_permission
|
||||
|
||||
def get_context_data(self, **kwargs):
|
||||
self.object = self.get_object()
|
||||
@ -210,7 +210,7 @@ class SetClosed(RedirectView, SingleObjectMixin):
|
||||
"""
|
||||
Close or open an item.
|
||||
"""
|
||||
permission_required = 'agenda.can_manage_agenda'
|
||||
required_permission = 'agenda.can_manage_agenda'
|
||||
allow_ajax = True
|
||||
url_name = 'item_overview'
|
||||
model = Item
|
||||
@ -237,7 +237,7 @@ class ItemUpdate(UpdateView):
|
||||
"""
|
||||
Update an existing item.
|
||||
"""
|
||||
permission_required = 'agenda.can_manage_agenda'
|
||||
required_permission = 'agenda.can_manage_agenda'
|
||||
template_name = 'agenda/edit.html'
|
||||
model = Item
|
||||
context_object_name = 'item'
|
||||
@ -256,7 +256,7 @@ class ItemCreate(CreateView):
|
||||
"""
|
||||
Create a new item.
|
||||
"""
|
||||
permission_required = 'agenda.can_manage_agenda'
|
||||
required_permission = 'agenda.can_manage_agenda'
|
||||
template_name = 'agenda/edit.html'
|
||||
model = Item
|
||||
context_object_name = 'item'
|
||||
@ -269,7 +269,7 @@ class ItemDelete(DeleteView):
|
||||
"""
|
||||
Delete an item.
|
||||
"""
|
||||
permission_required = 'agenda.can_manage_agenda'
|
||||
required_permission = 'agenda.can_manage_agenda'
|
||||
model = Item
|
||||
question_url_name = 'item_overview'
|
||||
success_url_name = 'item_overview'
|
||||
@ -325,7 +325,7 @@ class CreateRelatedAgendaItemView(SingleObjectMixin, RedirectView):
|
||||
This view is only for subclassing in views of related apps. You
|
||||
have to define 'model = ....'
|
||||
"""
|
||||
permission_required = 'agenda.can_manage_agenda'
|
||||
required_permission = 'agenda.can_manage_agenda'
|
||||
url_name = 'item_overview'
|
||||
url_name_args = []
|
||||
|
||||
@ -344,7 +344,7 @@ class CreateRelatedAgendaItemView(SingleObjectMixin, RedirectView):
|
||||
|
||||
|
||||
class AgendaNumberingView(QuestionView):
|
||||
permission_required = 'agenda.can_manage_agenda'
|
||||
required_permission = 'agenda.can_manage_agenda'
|
||||
question_url_name = 'item_overview'
|
||||
url_name = 'item_overview'
|
||||
question_message = ugettext_lazy('Do you really want to generate agenda numbering? Manually added item numbers will be overwritten!')
|
||||
@ -363,7 +363,7 @@ class AgendaPDF(PDFView):
|
||||
"""
|
||||
Create a full agenda-PDF.
|
||||
"""
|
||||
permission_required = 'agenda.can_see_agenda'
|
||||
required_permission = 'agenda.can_see_agenda'
|
||||
filename = ugettext_lazy('Agenda')
|
||||
document_title = ugettext_lazy('Agenda')
|
||||
|
||||
@ -383,7 +383,7 @@ class SpeakerAppendView(SingleObjectMixin, RedirectView):
|
||||
"""
|
||||
Set the request.user to the speaker list.
|
||||
"""
|
||||
permission_required = 'agenda.can_be_speaker'
|
||||
required_permission = 'agenda.can_be_speaker'
|
||||
url_name = 'item_view'
|
||||
model = Item
|
||||
|
||||
@ -407,7 +407,7 @@ class SpeakerDeleteView(DeleteView):
|
||||
success_url_name = 'item_view'
|
||||
question_url_name = 'item_view'
|
||||
|
||||
def has_permission(self, request, *args, **kwargs):
|
||||
def check_permission(self, request, *args, **kwargs):
|
||||
"""
|
||||
Check the permission to delete a speaker.
|
||||
"""
|
||||
@ -451,7 +451,7 @@ class SpeakerSpeakView(SingleObjectMixin, RedirectView):
|
||||
"""
|
||||
Mark the speaking person.
|
||||
"""
|
||||
permission_required = 'agenda.can_manage_agenda'
|
||||
required_permission = 'agenda.can_manage_agenda'
|
||||
url_name = 'item_view'
|
||||
model = Item
|
||||
|
||||
@ -478,7 +478,7 @@ class SpeakerEndSpeachView(SingleObjectMixin, RedirectView):
|
||||
"""
|
||||
The speach of the actual speaker is finished.
|
||||
"""
|
||||
permission_required = 'agenda.can_manage_agenda'
|
||||
required_permission = 'agenda.can_manage_agenda'
|
||||
url_name = 'item_view'
|
||||
model = Item
|
||||
|
||||
@ -504,7 +504,7 @@ class SpeakerListCloseView(SingleObjectMixin, RedirectView):
|
||||
"""
|
||||
View to close and reopen a list of speakers.
|
||||
"""
|
||||
permission_required = 'agenda.can_manage_agenda'
|
||||
required_permission = 'agenda.can_manage_agenda'
|
||||
model = Item
|
||||
reopen = False
|
||||
url_name = 'item_view'
|
||||
@ -524,7 +524,7 @@ class SpeakerChangeOrderView(SingleObjectMixin, RedirectView):
|
||||
|
||||
Has to be called as post-request with the new order of the speaker ids.
|
||||
"""
|
||||
permission_required = 'agenda.can_manage_agenda'
|
||||
required_permission = 'agenda.can_manage_agenda'
|
||||
model = Item
|
||||
url_name = 'item_view'
|
||||
|
||||
@ -772,6 +772,6 @@ class ItemCSVImportView(CSVImportView):
|
||||
Imports agenda items from an uploaded csv file.
|
||||
"""
|
||||
import_function = staticmethod(import_agenda_items)
|
||||
permission_required = 'agenda.can_manage_agenda'
|
||||
required_permission = 'agenda.can_manage_agenda'
|
||||
success_url_name = 'item_overview'
|
||||
template_name = 'agenda/item_form_csv_import.html'
|
||||
|
@ -14,7 +14,7 @@ class AgendaWidget(Widget):
|
||||
"""
|
||||
name = 'agenda'
|
||||
verbose_name = ugettext_lazy('Agenda')
|
||||
permission_required = 'core.can_manage_projector'
|
||||
required_permission = 'core.can_manage_projector'
|
||||
default_column = 1
|
||||
default_weight = 20
|
||||
template_name = 'agenda/widget_item.html'
|
||||
|
@ -10,7 +10,7 @@ class AssignmentMainMenuEntry(MainMenuEntry):
|
||||
Main menu entry for the assignment app.
|
||||
"""
|
||||
verbose_name = ugettext_lazy('Elections')
|
||||
permission_required = 'assignment.can_see_assignment'
|
||||
required_permission = 'assignment.can_see_assignment'
|
||||
default_weight = 40
|
||||
pattern_name = 'assignment_list'
|
||||
icon_css_class = 'icon-charts'
|
||||
|
@ -28,12 +28,12 @@ from .models import Assignment, AssignmentPoll
|
||||
|
||||
class AssignmentListView(ListView):
|
||||
"""ListView for all Assignments"""
|
||||
permission_required = 'assignment.can_see_assignment'
|
||||
required_permission = 'assignment.can_see_assignment'
|
||||
model = Assignment
|
||||
|
||||
|
||||
class AssignmentDetail(DetailView):
|
||||
permission_required = 'assignment.can_see_assignment'
|
||||
required_permission = 'assignment.can_see_assignment'
|
||||
model = Assignment
|
||||
form_class = AssignmentRunForm
|
||||
|
||||
@ -80,24 +80,24 @@ class AssignmentDetail(DetailView):
|
||||
class AssignmentCreateView(CreateView):
|
||||
model = Assignment
|
||||
form_class = AssignmentForm
|
||||
permission_required = 'assignment.can_manage_assignment'
|
||||
required_permission = 'assignment.can_manage_assignment'
|
||||
|
||||
|
||||
class AssignmentUpdateView(UpdateView):
|
||||
model = Assignment
|
||||
form_class = AssignmentForm
|
||||
permission_required = 'assignment.can_manage_assignment'
|
||||
required_permission = 'assignment.can_manage_assignment'
|
||||
|
||||
|
||||
class AssignmentDeleteView(DeleteView):
|
||||
permission_required = 'assignment.can_manage_assignment'
|
||||
required_permission = 'assignment.can_manage_assignment'
|
||||
model = Assignment
|
||||
success_url_name = 'assignment_list'
|
||||
|
||||
|
||||
class AssignmentSetStatusView(SingleObjectMixin, RedirectView):
|
||||
model = Assignment
|
||||
permission_required = 'assignment.can_manage_assignment'
|
||||
required_permission = 'assignment.can_manage_assignment'
|
||||
url_name = 'assignment_detail'
|
||||
|
||||
def pre_redirect(self, *args, **kwargs):
|
||||
@ -118,7 +118,7 @@ class AssignmentSetStatusView(SingleObjectMixin, RedirectView):
|
||||
|
||||
class AssignmentRunView(SingleObjectMixin, PermissionMixin, View):
|
||||
model = Assignment
|
||||
permission_required = 'assignment.can_nominate_self'
|
||||
required_permission = 'assignment.can_nominate_self'
|
||||
|
||||
def get(self, *args, **kwargs):
|
||||
assignment = self.get_object()
|
||||
@ -154,7 +154,7 @@ class AssignmentRunDeleteView(SingleObjectMixin, RedirectView):
|
||||
|
||||
class AssignmentRunOtherDeleteView(SingleObjectMixin, QuestionView):
|
||||
model = Assignment
|
||||
permission_required = 'assignment.can_manage_assignment'
|
||||
required_permission = 'assignment.can_manage_assignment'
|
||||
|
||||
def get_question_message(self):
|
||||
self._get_person_information()
|
||||
@ -193,7 +193,7 @@ class AssignmentRunOtherDeleteView(SingleObjectMixin, QuestionView):
|
||||
|
||||
class PollCreateView(SingleObjectMixin, RedirectView):
|
||||
model = Assignment
|
||||
permission_required = 'assignment.can_manage_assignment'
|
||||
required_permission = 'assignment.can_manage_assignment'
|
||||
url_name = 'assignment_detail'
|
||||
|
||||
def pre_redirect(self, *args, **kwargs):
|
||||
@ -224,7 +224,7 @@ class PollUpdateView(PollFormView):
|
||||
|
||||
class SetPublishStatusView(SingleObjectMixin, RedirectView):
|
||||
model = AssignmentPoll
|
||||
permission_required = 'assignment.can_manage_assignment'
|
||||
required_permission = 'assignment.can_manage_assignment'
|
||||
url_name = 'assignment_detail'
|
||||
allow_ajax = True
|
||||
|
||||
@ -246,7 +246,7 @@ class SetPublishStatusView(SingleObjectMixin, RedirectView):
|
||||
|
||||
class SetElectedView(SingleObjectMixin, RedirectView):
|
||||
model = Assignment
|
||||
permission_required = 'assignment.can_manage_assignment'
|
||||
required_permission = 'assignment.can_manage_assignment'
|
||||
url_name = 'assignment_detail'
|
||||
allow_ajax = True
|
||||
|
||||
@ -272,7 +272,7 @@ class AssignmentPollDeleteView(DeleteView):
|
||||
"""
|
||||
Delete an assignment poll object.
|
||||
"""
|
||||
permission_required = 'assignment.can_manage_assignment'
|
||||
required_permission = 'assignment.can_manage_assignment'
|
||||
model = AssignmentPoll
|
||||
|
||||
def pre_redirect(self, request, *args, **kwargs):
|
||||
@ -294,7 +294,7 @@ class AssignmentPollDeleteView(DeleteView):
|
||||
|
||||
|
||||
class AssignmentPDF(PDFView):
|
||||
permission_required = 'assignment.can_see_assignment'
|
||||
required_permission = 'assignment.can_see_assignment'
|
||||
top_space = 0
|
||||
|
||||
def get_filename(self):
|
||||
@ -500,7 +500,7 @@ class CreateRelatedAgendaItemView(_CreateRelatedAgendaItemView):
|
||||
|
||||
|
||||
class AssignmentPollPDF(PDFView):
|
||||
permission_required = 'assignment.can_manage_assignment'
|
||||
required_permission = 'assignment.can_manage_assignment'
|
||||
top_space = 0
|
||||
|
||||
def get(self, request, *args, **kwargs):
|
||||
|
@ -13,7 +13,7 @@ class AssignmentWidget(Widget):
|
||||
"""
|
||||
name = 'assignment'
|
||||
verbose_name = ugettext_lazy('Elections')
|
||||
permission_required = 'core.can_manage_projector'
|
||||
required_permission = 'core.can_manage_projector'
|
||||
default_column = 1
|
||||
default_weight = 50
|
||||
template_name = 'assignment/widget_assignment.html'
|
||||
|
@ -10,7 +10,7 @@ class ConfigMainMenuEntry(MainMenuEntry):
|
||||
Main menu entry for the config app.
|
||||
"""
|
||||
verbose_name = ugettext_lazy('Configuration')
|
||||
permission_required = 'config.can_manage'
|
||||
required_permission = 'config.can_manage'
|
||||
default_weight = 70
|
||||
pattern_name = 'config_first_config_collection_view'
|
||||
icon_css_class = 'icon-cog'
|
||||
|
@ -15,7 +15,7 @@ class ConfigView(FormView):
|
||||
"""
|
||||
The view for a config collection.
|
||||
"""
|
||||
permission_required = 'config.can_manage'
|
||||
required_permission = 'config.can_manage'
|
||||
template_name = 'config/config_form.html'
|
||||
config_collection = None
|
||||
form_class = forms.Form
|
||||
|
@ -10,7 +10,7 @@ class DashboardMainMenuEntry(MainMenuEntry):
|
||||
Main menu entry to the dashboard.
|
||||
"""
|
||||
verbose_name = ugettext_lazy('Dashboard')
|
||||
permission_required = 'core.can_see_dashboard'
|
||||
required_permission = 'core.can_see_dashboard'
|
||||
default_weight = 10
|
||||
icon_css_class = 'icon-home'
|
||||
pattern_name = 'core_dashboard'
|
||||
|
@ -28,7 +28,7 @@ class DashboardView(utils_views.AjaxMixin, utils_views.TemplateView):
|
||||
Dashboard of OpenSlides. This main view uses the widget api to collect all
|
||||
widgets from all apps. See openslides.utils.widgets.Widget for more details.
|
||||
"""
|
||||
permission_required = 'core.can_see_dashboard'
|
||||
required_permission = 'core.can_see_dashboard'
|
||||
template_name = 'core/dashboard.html'
|
||||
|
||||
def get_context_data(self, **kwargs):
|
||||
@ -49,7 +49,7 @@ class SelectWidgetsView(utils_views.TemplateView):
|
||||
dashboard. The setting is saved in the session.
|
||||
"""
|
||||
# TODO: Use another base view class here, e. g. a FormView
|
||||
permission_required = 'core.can_see_dashboard'
|
||||
required_permission = 'core.can_see_dashboard'
|
||||
template_name = 'core/select_widgets.html'
|
||||
|
||||
def get_context_data(self, **kwargs):
|
||||
@ -187,7 +187,7 @@ class CustomSlideViewMixin(object):
|
||||
"""
|
||||
Mixin for for CustomSlide Views.
|
||||
"""
|
||||
permission_required = 'core.can_manage_projector'
|
||||
required_permission = 'core.can_manage_projector'
|
||||
template_name = 'core/customslide_update.html'
|
||||
model = CustomSlide
|
||||
success_url_name = 'core_dashboard'
|
||||
|
@ -14,7 +14,7 @@ class WelcomeWidget(Widget):
|
||||
Welcome widget with static info for all users.
|
||||
"""
|
||||
name = 'welcome'
|
||||
permission_required = 'core.can_see_dashboard'
|
||||
required_permission = 'core.can_see_dashboard'
|
||||
default_column = 1
|
||||
default_weight = 10
|
||||
template_name = 'core/widget_welcome.html'
|
||||
@ -30,7 +30,7 @@ class CustonSlideWidget(Widget):
|
||||
"""
|
||||
name = 'custom_slide'
|
||||
verbose_name = ugettext_lazy('Custom Slides')
|
||||
permission_required = 'core.can_manage_projector'
|
||||
required_permission = 'core.can_manage_projector'
|
||||
default_column = 2
|
||||
default_weight = 30
|
||||
template_name = 'core/widget_customslide.html'
|
||||
|
@ -18,7 +18,7 @@ class MediafileListView(ListView):
|
||||
"""
|
||||
model = Mediafile
|
||||
|
||||
def has_permission(self, request, *args, **kwargs):
|
||||
def check_permission(self, request, *args, **kwargs):
|
||||
return (request.user.has_perm('mediafile.can_see') or
|
||||
request.user.has_perm('mediafile.can_upload') or
|
||||
request.user.has_perm('mediafile.can_manage'))
|
||||
@ -67,7 +67,7 @@ class MediafileCreateView(MediafileViewMixin, CreateView):
|
||||
"""
|
||||
View to upload a new file.
|
||||
"""
|
||||
permission_required = 'mediafile.can_upload'
|
||||
required_permission = 'mediafile.can_upload'
|
||||
|
||||
def get_form_kwargs(self, *args, **kwargs):
|
||||
form_kwargs = super(MediafileCreateView, self).get_form_kwargs(*args, **kwargs)
|
||||
@ -80,7 +80,7 @@ class MediafileUpdateView(MediafileViewMixin, UpdateView):
|
||||
"""
|
||||
View to edit the entry of an uploaded file.
|
||||
"""
|
||||
def has_permission(self, request, *args, **kwargs):
|
||||
def check_permission(self, request, *args, **kwargs):
|
||||
return (request.user.has_perm('mediafile.can_manage') or
|
||||
(request.user.has_perm('mediafile.can_upload') and self.get_object().uploader == self.request.user))
|
||||
|
||||
@ -97,7 +97,7 @@ class MediafileDeleteView(DeleteView):
|
||||
model = Mediafile
|
||||
success_url_name = 'mediafile_list'
|
||||
|
||||
def has_permission(self, request, *args, **kwargs):
|
||||
def check_permission(self, request, *args, **kwargs):
|
||||
return (request.user.has_perm('mediafile.can_manage') or
|
||||
(request.user.has_perm('mediafile.can_upload') and self.get_object().uploader == self.request.user))
|
||||
|
||||
|
@ -14,7 +14,7 @@ class PDFPresentationWidget(Widget):
|
||||
"""
|
||||
name = 'presentations'
|
||||
verbose_name = ugettext_lazy('Presentations')
|
||||
permission_required = 'core.can_manage_projector'
|
||||
required_permission = 'core.can_manage_projector'
|
||||
default_column = 1
|
||||
default_weight = 75
|
||||
template_name = 'mediafile/widget_pdfpresentation.html'
|
||||
|
@ -10,7 +10,7 @@ class MotionMainMenuEntry(MainMenuEntry):
|
||||
Main menu entry for the motion app.
|
||||
"""
|
||||
verbose_name = ugettext_lazy('Motions')
|
||||
permission_required = 'motion.can_see_motion'
|
||||
required_permission = 'motion.can_see_motion'
|
||||
default_weight = 30
|
||||
pattern_name = 'motion_list'
|
||||
icon_css_class = 'icon-file'
|
||||
|
@ -31,7 +31,7 @@ class MotionListView(ListView):
|
||||
"""
|
||||
View, to list all motions.
|
||||
"""
|
||||
permission_required = 'motion.can_see_motion'
|
||||
required_permission = 'motion.can_see_motion'
|
||||
model = Motion
|
||||
|
||||
motion_list = MotionListView.as_view()
|
||||
@ -41,7 +41,7 @@ class MotionDetailView(DetailView):
|
||||
"""
|
||||
Show one motion.
|
||||
"""
|
||||
permission_required = 'motion.can_see_motion'
|
||||
required_permission = 'motion.can_see_motion'
|
||||
model = Motion
|
||||
|
||||
def get_context_data(self, **kwargs):
|
||||
@ -163,7 +163,7 @@ class MotionCreateView(MotionEditMixin, CreateView):
|
||||
"""
|
||||
model = Motion
|
||||
|
||||
def has_permission(self, request, *args, **kwargs):
|
||||
def check_permission(self, request, *args, **kwargs):
|
||||
"""
|
||||
Checks whether the requesting user can submit a new motion. He needs
|
||||
at least the permission 'motion.can_create_motion'. If the submitting
|
||||
@ -210,7 +210,7 @@ class MotionUpdateView(MotionEditMixin, UpdateView):
|
||||
"""
|
||||
model = Motion
|
||||
|
||||
def has_permission(self, request, *args, **kwargs):
|
||||
def check_permission(self, request, *args, **kwargs):
|
||||
"""
|
||||
Check if the request.user has the permission to edit the motion.
|
||||
"""
|
||||
@ -279,7 +279,7 @@ class MotionDeleteView(DeleteView):
|
||||
model = Motion
|
||||
success_url_name = 'motion_list'
|
||||
|
||||
def has_permission(self, request, *args, **kwargs):
|
||||
def check_permission(self, request, *args, **kwargs):
|
||||
"""
|
||||
Check if the request.user has the permission to delete the motion.
|
||||
"""
|
||||
@ -296,7 +296,7 @@ class VersionDeleteView(DeleteView):
|
||||
View to delete a motion version.
|
||||
"""
|
||||
model = MotionVersion
|
||||
permission_required = 'motion.can_manage_motion'
|
||||
required_permission = 'motion.can_manage_motion'
|
||||
success_url_name = 'motion_detail'
|
||||
|
||||
def get_object(self):
|
||||
@ -326,7 +326,7 @@ class VersionPermitView(SingleObjectMixin, QuestionView):
|
||||
"""
|
||||
model = Motion
|
||||
final_message = ugettext_lazy('Version successfully permitted.')
|
||||
permission_required = 'motion.can_manage_motion'
|
||||
required_permission = 'motion.can_manage_motion'
|
||||
question_url_name = 'motion_version_detail'
|
||||
|
||||
def get(self, *args, **kwargs):
|
||||
@ -372,7 +372,7 @@ class VersionDiffView(DetailView):
|
||||
"""
|
||||
Show diff between two versions of a motion.
|
||||
"""
|
||||
permission_required = 'motion.can_see_motion'
|
||||
required_permission = 'motion.can_see_motion'
|
||||
model = Motion
|
||||
template_name = 'motion/motion_diff.html'
|
||||
|
||||
@ -414,7 +414,7 @@ class SupportView(SingleObjectMixin, QuestionView):
|
||||
If self.support is False, the view will remove a request.user from the supporter list.
|
||||
"""
|
||||
|
||||
permission_required = 'motion.can_support_motion'
|
||||
required_permission = 'motion.can_support_motion'
|
||||
model = Motion
|
||||
support = True
|
||||
|
||||
@ -481,7 +481,7 @@ class PollCreateView(SingleObjectMixin, RedirectView):
|
||||
"""
|
||||
View to create a poll for a motion.
|
||||
"""
|
||||
permission_required = 'motion.can_manage_motion'
|
||||
required_permission = 'motion.can_manage_motion'
|
||||
model = Motion
|
||||
url_name = 'motionpoll_detail'
|
||||
|
||||
@ -514,7 +514,7 @@ class PollMixin(object):
|
||||
Mixin for the PollUpdateView and the PollDeleteView.
|
||||
"""
|
||||
|
||||
permission_required = 'motion.can_manage_motion'
|
||||
required_permission = 'motion.can_manage_motion'
|
||||
success_url_name = 'motion_detail'
|
||||
|
||||
def get_object(self):
|
||||
@ -598,7 +598,7 @@ class PollPDFView(PollMixin, PDFView):
|
||||
Generates a ballotpaper.
|
||||
"""
|
||||
|
||||
permission_required = 'motion.can_manage_motion'
|
||||
required_permission = 'motion.can_manage_motion'
|
||||
top_space = 0
|
||||
|
||||
def get(self, *args, **kwargs):
|
||||
@ -635,7 +635,7 @@ class MotionSetStateView(SingleObjectMixin, RedirectView):
|
||||
If self.reset is False, the new state is taken from url.
|
||||
If self.reset is True, the default state is taken.
|
||||
"""
|
||||
permission_required = 'motion.can_manage_motion'
|
||||
required_permission = 'motion.can_manage_motion'
|
||||
url_name = 'motion_detail'
|
||||
model = Motion
|
||||
reset = False
|
||||
@ -694,7 +694,7 @@ class MotionPDFView(SingleObjectMixin, PDFView):
|
||||
If self.print_all_motions is False, the view returns a PDF with only one
|
||||
motion.
|
||||
"""
|
||||
permission_required = 'motion.can_see_motion'
|
||||
required_permission = 'motion.can_see_motion'
|
||||
model = Motion
|
||||
top_space = 0
|
||||
print_all_motions = False
|
||||
@ -735,14 +735,14 @@ motion_detail_pdf = MotionPDFView.as_view(print_all_motions=False)
|
||||
|
||||
|
||||
class CategoryListView(ListView):
|
||||
permission_required = 'motion.can_manage_motion'
|
||||
required_permission = 'motion.can_manage_motion'
|
||||
model = Category
|
||||
|
||||
category_list = CategoryListView.as_view()
|
||||
|
||||
|
||||
class CategoryCreateView(CreateView):
|
||||
permission_required = 'motion.can_manage_motion'
|
||||
required_permission = 'motion.can_manage_motion'
|
||||
model = Category
|
||||
success_url_name = 'motion_category_list'
|
||||
url_name_args = []
|
||||
@ -751,7 +751,7 @@ category_create = CategoryCreateView.as_view()
|
||||
|
||||
|
||||
class CategoryUpdateView(UpdateView):
|
||||
permission_required = 'motion.can_manage_motion'
|
||||
required_permission = 'motion.can_manage_motion'
|
||||
model = Category
|
||||
success_url_name = 'motion_category_list'
|
||||
url_name_args = []
|
||||
@ -760,7 +760,7 @@ category_update = CategoryUpdateView.as_view()
|
||||
|
||||
|
||||
class CategoryDeleteView(DeleteView):
|
||||
permission_required = 'motion.can_manage_motion'
|
||||
required_permission = 'motion.can_manage_motion'
|
||||
model = Category
|
||||
question_url_name = 'motion_category_list'
|
||||
url_name_args = []
|
||||
@ -774,7 +774,7 @@ class MotionCSVImportView(CSVImportView):
|
||||
Imports motions from an uploaded csv file.
|
||||
"""
|
||||
form_class = MotionCSVImportForm
|
||||
permission_required = 'motion.can_manage_motion'
|
||||
required_permission = 'motion.can_manage_motion'
|
||||
success_url_name = 'motion_list'
|
||||
template_name = 'motion/motion_form_csv_import.html'
|
||||
|
||||
|
@ -13,7 +13,7 @@ class MotionWidget(Widget):
|
||||
"""
|
||||
name = 'motion'
|
||||
verbose_name = ugettext_lazy('Motions')
|
||||
permission_required = 'core.can_manage_projector'
|
||||
required_permission = 'core.can_manage_projector'
|
||||
default_column = 1
|
||||
default_weight = 40
|
||||
icon_css_class = 'icon-file'
|
||||
|
@ -10,7 +10,7 @@ class ParticipantMainMenuEntry(MainMenuEntry):
|
||||
Main menu entry for the participant app.
|
||||
"""
|
||||
verbose_name = ugettext_lazy('Participants')
|
||||
permission_required = 'participant.can_see_participant'
|
||||
required_permission = 'participant.can_see_participant'
|
||||
default_weight = 50
|
||||
pattern_name = 'user_overview'
|
||||
icon_css_class = 'icon-user'
|
||||
|
@ -30,7 +30,7 @@ class UserOverview(ListView):
|
||||
"""
|
||||
Show all participants (users).
|
||||
"""
|
||||
permission_required = 'participant.can_see_participant'
|
||||
required_permission = 'participant.can_see_participant'
|
||||
template_name = 'participant/overview.html'
|
||||
context_object_name = 'users'
|
||||
|
||||
@ -56,7 +56,7 @@ class UserDetailView(DetailView, PermissionMixin):
|
||||
"""
|
||||
Classed based view to show a specific user in the interface.
|
||||
"""
|
||||
permission_required = 'participant.can_see_participant'
|
||||
required_permission = 'participant.can_see_participant'
|
||||
model = User
|
||||
template_name = 'participant/user_detail.html'
|
||||
context_object_name = 'shown_user'
|
||||
@ -66,7 +66,7 @@ class UserCreateView(CreateView):
|
||||
"""
|
||||
Create a new participant.
|
||||
"""
|
||||
permission_required = 'participant.can_manage_participant'
|
||||
required_permission = 'participant.can_manage_participant'
|
||||
template_name = 'participant/edit.html'
|
||||
model = User
|
||||
context_object_name = 'edit_user'
|
||||
@ -97,7 +97,7 @@ class UserMultipleCreateView(FormView):
|
||||
"""
|
||||
View to create multiple users at once using a big text field.
|
||||
"""
|
||||
permission_required = 'participant.can_manage_participant'
|
||||
required_permission = 'participant.can_manage_participant'
|
||||
template_name = 'participant/user_form_multiple.html'
|
||||
form_class = UserMultipleCreateForm
|
||||
success_url_name = 'user_overview'
|
||||
@ -124,7 +124,7 @@ class UserUpdateView(UpdateView):
|
||||
"""
|
||||
Update an existing participant.
|
||||
"""
|
||||
permission_required = 'participant.can_manage_participant'
|
||||
required_permission = 'participant.can_manage_participant'
|
||||
template_name = 'participant/edit.html'
|
||||
model = User
|
||||
context_object_name = 'edit_user'
|
||||
@ -156,7 +156,7 @@ class UserDeleteView(DeleteView):
|
||||
"""
|
||||
Delete an participant.
|
||||
"""
|
||||
permission_required = 'participant.can_manage_participant'
|
||||
required_permission = 'participant.can_manage_participant'
|
||||
model = User
|
||||
success_url_name = 'user_overview'
|
||||
url_name_args = []
|
||||
@ -178,7 +178,7 @@ class SetUserStatusView(SingleObjectMixin, RedirectView):
|
||||
"""
|
||||
Activate or deactivate an user.
|
||||
"""
|
||||
permission_required = 'participant.can_manage_participant'
|
||||
required_permission = 'participant.can_manage_participant'
|
||||
allow_ajax = True
|
||||
url_name = 'user_overview'
|
||||
url_name_args = []
|
||||
@ -209,7 +209,7 @@ class ParticipantsListPDF(PDFView):
|
||||
"""
|
||||
Generate the userliste as PDF.
|
||||
"""
|
||||
permission_required = 'participant.can_see_participant'
|
||||
required_permission = 'participant.can_see_participant'
|
||||
filename = ugettext_lazy("Participant-list")
|
||||
document_title = ugettext_lazy('List of Participants')
|
||||
|
||||
@ -224,7 +224,7 @@ class ParticipantsPasswordsPDF(PDFView):
|
||||
"""
|
||||
Generate the access data welcome paper for all participants as PDF.
|
||||
"""
|
||||
permission_required = 'participant.can_manage_participant'
|
||||
required_permission = 'participant.can_manage_participant'
|
||||
filename = ugettext_lazy("Participant-access-data")
|
||||
top_space = 0
|
||||
|
||||
@ -243,7 +243,7 @@ class UserCSVImportView(CSVImportView):
|
||||
Import users via CSV.
|
||||
"""
|
||||
import_function = staticmethod(import_users)
|
||||
permission_required = 'participant.can_manage_participant'
|
||||
required_permission = 'participant.can_manage_participant'
|
||||
success_url_name = 'user_overview'
|
||||
template_name = 'participant/user_form_csv_import.html'
|
||||
|
||||
@ -252,7 +252,7 @@ class ResetPasswordView(SingleObjectMixin, QuestionView):
|
||||
"""
|
||||
Set the Passwort for a user to his default password.
|
||||
"""
|
||||
permission_required = 'participant.can_manage_participant'
|
||||
required_permission = 'participant.can_manage_participant'
|
||||
model = User
|
||||
allow_ajax = True
|
||||
question_message = ugettext_lazy('Do you really want to reset the password?')
|
||||
@ -275,7 +275,7 @@ class GroupOverview(ListView):
|
||||
"""
|
||||
Overview over all groups.
|
||||
"""
|
||||
permission_required = 'participant.can_manage_participant'
|
||||
required_permission = 'participant.can_manage_participant'
|
||||
template_name = 'participant/group_overview.html'
|
||||
context_object_name = 'groups'
|
||||
model = Group
|
||||
@ -285,7 +285,7 @@ class GroupDetailView(DetailView, PermissionMixin):
|
||||
"""
|
||||
Classed based view to show a specific group in the interface.
|
||||
"""
|
||||
permission_required = 'participant.can_manage_participant'
|
||||
required_permission = 'participant.can_manage_participant'
|
||||
model = Group
|
||||
template_name = 'participant/group_detail.html'
|
||||
context_object_name = 'group'
|
||||
@ -305,7 +305,7 @@ class GroupCreateView(CreateView):
|
||||
"""
|
||||
Create a new group.
|
||||
"""
|
||||
permission_required = 'participant.can_manage_participant'
|
||||
required_permission = 'participant.can_manage_participant'
|
||||
template_name = 'participant/group_edit.html'
|
||||
context_object_name = 'group'
|
||||
model = Group
|
||||
@ -322,7 +322,7 @@ class GroupUpdateView(UpdateView):
|
||||
"""
|
||||
Update an existing group.
|
||||
"""
|
||||
permission_required = 'participant.can_manage_participant'
|
||||
required_permission = 'participant.can_manage_participant'
|
||||
template_name = 'participant/group_edit.html'
|
||||
model = Group
|
||||
context_object_name = 'group'
|
||||
@ -344,7 +344,7 @@ class GroupDeleteView(DeleteView):
|
||||
"""
|
||||
Delete a group.
|
||||
"""
|
||||
permission_required = 'participant.can_manage_participant'
|
||||
required_permission = 'participant.can_manage_participant'
|
||||
model = Group
|
||||
success_url_name = 'user_group_overview'
|
||||
url_name_args = []
|
||||
|
@ -14,7 +14,7 @@ class UserWidget(Widget):
|
||||
"""
|
||||
name = 'user'
|
||||
verbose_name = ugettext_lazy('Participants')
|
||||
permission_required = 'core.can_manage_projector'
|
||||
required_permission = 'core.can_manage_projector'
|
||||
default_column = 1
|
||||
default_weight = 60
|
||||
default_active = False
|
||||
@ -34,7 +34,7 @@ class GroupWidget(Widget):
|
||||
"""
|
||||
name = 'group'
|
||||
verbose_name = ugettext_lazy('Groups')
|
||||
permission_required = 'core.can_manage_projector'
|
||||
required_permission = 'core.can_manage_projector'
|
||||
default_column = 1
|
||||
default_weight = 70
|
||||
default_active = False
|
||||
|
@ -15,7 +15,7 @@ class ProjectorView(TemplateView):
|
||||
"""
|
||||
The Projector-Page.
|
||||
"""
|
||||
permission_required = 'core.can_see_projector'
|
||||
required_permission = 'core.can_see_projector'
|
||||
template_name = 'projector.html'
|
||||
|
||||
def get_context_data(self, **kwargs):
|
||||
@ -43,7 +43,7 @@ class ActivateView(RedirectView):
|
||||
"""
|
||||
Activate a Slide.
|
||||
"""
|
||||
permission_required = 'core.can_manage_projector'
|
||||
required_permission = 'core.can_manage_projector'
|
||||
url_name = 'core_dashboard'
|
||||
allow_ajax = True
|
||||
|
||||
@ -68,7 +68,7 @@ class ProjectorControllView(RedirectView):
|
||||
"""
|
||||
Scale or scroll the projector.
|
||||
"""
|
||||
permission_required = 'core.can_manage_projector'
|
||||
required_permission = 'core.can_manage_projector'
|
||||
url_name = 'core_dashboard'
|
||||
allow_ajax = True
|
||||
|
||||
@ -102,7 +102,7 @@ class CountdownControllView(RedirectView):
|
||||
"""
|
||||
Start, stop or reset the countdown.
|
||||
"""
|
||||
permission_required = 'core.can_manage_projector'
|
||||
required_permission = 'core.can_manage_projector'
|
||||
url_name = 'core_dashboard'
|
||||
allow_ajax = True
|
||||
|
||||
@ -137,7 +137,7 @@ class OverlayMessageView(RedirectView):
|
||||
"""
|
||||
url_name = 'core_dashboard'
|
||||
allow_ajax = True
|
||||
permission_required = 'core.can_manage_projector'
|
||||
required_permission = 'core.can_manage_projector'
|
||||
|
||||
def pre_post_redirect(self, request, *args, **kwargs):
|
||||
if 'message' in request.POST:
|
||||
@ -158,7 +158,7 @@ class ActivateOverlay(RedirectView):
|
||||
"""
|
||||
url_name = 'core_dashboard'
|
||||
allow_ajax = True
|
||||
permission_required = 'core.can_manage_projector'
|
||||
required_permission = 'core.can_manage_projector'
|
||||
|
||||
def pre_redirect(self, request, *args, **kwargs):
|
||||
overlay = get_overlays()[kwargs['name']]
|
||||
|
@ -14,7 +14,7 @@ class ProjectorLiveWidget(Widget):
|
||||
"""
|
||||
name = 'live_view'
|
||||
verbose_name = ugettext_lazy('Projector live view')
|
||||
permission_required = 'core.can_see_projector'
|
||||
required_permission = 'core.can_see_projector'
|
||||
default_column = 2
|
||||
default_weight = 10
|
||||
template_name = 'projector/widget_live_view.html'
|
||||
@ -27,7 +27,7 @@ class OverlayWidget(Widget):
|
||||
"""
|
||||
name = 'overlays' # TODO: Use singular here
|
||||
verbose_name = ugettext_lazy('Overlays')
|
||||
permission_required = 'core.can_manage_projector'
|
||||
required_permission = 'core.can_manage_projector'
|
||||
default_column = 2
|
||||
default_weight = 20
|
||||
template_name = 'projector/widget_overlay.html'
|
||||
|
@ -18,14 +18,14 @@ class MainMenuEntry(object):
|
||||
magic.
|
||||
|
||||
For the appearance there are some optional attributes and methods like
|
||||
permission_required, default_weight, stylesheets, javascript_files,
|
||||
required_permission, default_weight, stylesheets, javascript_files,
|
||||
check_permission, get_url, get_default_weight, get_icon_css_class,
|
||||
get_stylesheets and get_javascript_files.
|
||||
"""
|
||||
__metaclass__ = SignalConnectMetaClass
|
||||
signal = Signal(providing_args=['request'])
|
||||
verbose_name = None
|
||||
permission_required = None
|
||||
required_permission = None
|
||||
default_weight = 0
|
||||
pattern_name = None
|
||||
icon_css_class = 'icon-home'
|
||||
@ -63,7 +63,7 @@ class MainMenuEntry(object):
|
||||
"""
|
||||
Returns True if the request user is allowed to see the entry.
|
||||
"""
|
||||
return self.permission_required is None or self.request.user.has_perm(self.permission_required)
|
||||
return self.required_permission is None or self.request.user.has_perm(self.required_permission)
|
||||
|
||||
def get_icon_css_class(self):
|
||||
"""
|
||||
|
@ -24,8 +24,6 @@ from .pdf import firstPage, laterPages
|
||||
from .signals import template_manipulation
|
||||
from .utils import html_strong
|
||||
|
||||
NO_PERMISSION_REQUIRED = 'No permission required'
|
||||
|
||||
View = django_views.View
|
||||
|
||||
|
||||
@ -44,21 +42,22 @@ class LoginMixin(object):
|
||||
|
||||
class PermissionMixin(object):
|
||||
"""
|
||||
Mixin for views, that only can be visited from users with special rights.
|
||||
Mixin for views, that only can be visited from users with special
|
||||
permissions.
|
||||
|
||||
Set the attribute 'permission_required' to the required permission string.
|
||||
Set the attribute 'required_permission' to the required permission
|
||||
string or override the method 'check_permission'.
|
||||
"""
|
||||
permission_required = NO_PERMISSION_REQUIRED
|
||||
required_permission = None
|
||||
|
||||
# TODO: Rename this to check_permission
|
||||
def has_permission(self, request, *args, **kwargs):
|
||||
def check_permission(self, request, *args, **kwargs):
|
||||
"""
|
||||
Checks if the user has the required permission.
|
||||
"""
|
||||
if self.permission_required == NO_PERMISSION_REQUIRED:
|
||||
if self.required_permission is None:
|
||||
return True
|
||||
else:
|
||||
return request.user.has_perm(self.permission_required)
|
||||
return request.user.has_perm(self.required_permission)
|
||||
|
||||
def dispatch(self, request, *args, **kwargs):
|
||||
"""
|
||||
@ -66,7 +65,7 @@ class PermissionMixin(object):
|
||||
|
||||
If the user is not logged in, redirect the user to the login page.
|
||||
"""
|
||||
if not self.has_permission(request, *args, **kwargs):
|
||||
if not self.check_permission(request, *args, **kwargs):
|
||||
if not request.user.is_authenticated():
|
||||
path = request.get_full_path()
|
||||
return HttpResponseRedirect(
|
||||
|
@ -18,7 +18,7 @@ class Widget(object):
|
||||
(SignalConnectMetaClass) does the rest of the magic.
|
||||
|
||||
For the appearance of the widget there are some attributes and methods
|
||||
like verbose_name, permission_required, default_column, default_weight,
|
||||
like verbose_name, required_permission, default_column, default_weight,
|
||||
default_active, template_name, context, icon_css_class,
|
||||
more_link_pattern_name, stylesheets, javascript_files,
|
||||
get_verbose_name, check_permission, get_html, get_context_data,
|
||||
@ -29,7 +29,7 @@ class Widget(object):
|
||||
signal = Signal(providing_args=['request'])
|
||||
name = None
|
||||
verbose_name = None
|
||||
permission_required = None
|
||||
required_permission = None
|
||||
default_column = 1
|
||||
default_weight = 0
|
||||
default_active = True
|
||||
@ -77,7 +77,7 @@ class Widget(object):
|
||||
"""
|
||||
Returns True if the request user is allowed to see the widget.
|
||||
"""
|
||||
return self.permission_required is None or self.request.user.has_perm(self.permission_required)
|
||||
return self.required_permission is None or self.request.user.has_perm(self.required_permission)
|
||||
|
||||
def is_active(self):
|
||||
"""
|
||||
|
@ -40,22 +40,22 @@ class PermissionMixinTest(ViewTestCase):
|
||||
def test_dispatch(self):
|
||||
client = Client()
|
||||
|
||||
# View without permission_required
|
||||
# View without required_permission
|
||||
response = client.get('/permission_mixin1/')
|
||||
self.assertEqual(response.status_code, 200)
|
||||
self.assertEqual(response.content, 'Well done.')
|
||||
|
||||
# View with permission_required without login
|
||||
# View with required_permission without login
|
||||
response = client.get('/permission_mixin2/')
|
||||
self.assertEqual(response.status_code, 302)
|
||||
self.assertEqual(response['Location'], 'http://testserver/login/?next=/permission_mixin2/')
|
||||
|
||||
# View with permission_required, with login, without permission
|
||||
# View with required_permission, with login, without permission
|
||||
client.login(username='admin', password='admin')
|
||||
response = client.get('/permission_mixin2/')
|
||||
self.assertEqual(response.status_code, 403)
|
||||
|
||||
# View with permission_required, with login, with permission
|
||||
# View with required_permission, with login, with permission
|
||||
response = client.get('/permission_mixin3/')
|
||||
self.assertEqual(response.status_code, 200)
|
||||
|
||||
|
@ -24,8 +24,8 @@ urlpatterns += patterns(
|
||||
views.PermissionMixinView.as_view()),
|
||||
|
||||
url(r'^permission_mixin2/$',
|
||||
views.PermissionMixinView.as_view(permission_required='permission_string')),
|
||||
views.PermissionMixinView.as_view(required_permission='permission_string')),
|
||||
|
||||
url(r'^permission_mixin3/$',
|
||||
views.PermissionMixinView.as_view(permission_required='agenda.can_see_agenda')),
|
||||
views.PermissionMixinView.as_view(required_permission='agenda.can_see_agenda')),
|
||||
)
|
||||
|
Loading…
Reference in New Issue
Block a user