src/pyams_security/zmi/plugin/userfolder.py
changeset 54 59683c264d94
parent 42 07229ac2497b
child 73 8777986af300
equal deleted inserted replaced
53:68678e37a77a 54:59683c264d94
    20 from pyams_pagelet.interfaces import PageletCreatedEvent
    20 from pyams_pagelet.interfaces import PageletCreatedEvent
    21 from pyams_security.interfaces import IUsersFolderPlugin, ISecurityManager, ILocalUser, IUserRegistrationInfo
    21 from pyams_security.interfaces import IUsersFolderPlugin, ISecurityManager, ILocalUser, IUserRegistrationInfo
    22 from pyams_skin.interfaces.viewlet import IToolbarAddingMenu, IWidgetTitleViewletManager
    22 from pyams_skin.interfaces.viewlet import IToolbarAddingMenu, IWidgetTitleViewletManager
    23 from pyams_skin.interfaces import IPageHeader
    23 from pyams_skin.interfaces import IPageHeader
    24 from pyams_skin.layer import IPyAMSLayer
    24 from pyams_skin.layer import IPyAMSLayer
       
    25 from pyams_utils.interfaces import VIEW_SYSTEM_PERMISSION, MANAGE_SYSTEM_PERMISSION
    25 from pyams_zmi.layer import IAdminLayer
    26 from pyams_zmi.layer import IAdminLayer
    26 from z3c.form.interfaces import DISPLAY_MODE, IDataExtractedEvent
    27 from z3c.form.interfaces import DISPLAY_MODE, IDataExtractedEvent
    27 from z3c.table.interfaces import IColumn
    28 from z3c.table.interfaces import IColumn
    28 from zope.component.interfaces import ISite
    29 from zope.component.interfaces import ISite
    29 from zope.dublincore.interfaces import IZopeDublinCore
    30 from zope.dublincore.interfaces import IZopeDublinCore
    57 # Users folder views
    58 # Users folder views
    58 #
    59 #
    59 
    60 
    60 @viewlet_config(name='add-users-folder.menu', context=ISite, layer=IAdminLayer,
    61 @viewlet_config(name='add-users-folder.menu', context=ISite, layer=IAdminLayer,
    61                 view=SecurityManagerPluginsTable, manager=IToolbarAddingMenu,
    62                 view=SecurityManagerPluginsTable, manager=IToolbarAddingMenu,
    62                 permission='system.manage', weight=10)
    63                 permission=MANAGE_SYSTEM_PERMISSION, weight=10)
    63 class UsersFolderAddMenu(ToolbarMenuItem):
    64 class UsersFolderAddMenu(ToolbarMenuItem):
    64     """Local users folder add menu"""
    65     """Local users folder add menu"""
    65 
    66 
    66     label = _("Add local users folder...")
    67     label = _("Add local users folder...")
    67     label_css_class = 'fa fa-fw fa-user'
    68     label_css_class = 'fa fa-fw fa-user'
    68     url = 'add-users-folder.html'
    69     url = 'add-users-folder.html'
    69     modal_target = True
    70     modal_target = True
    70 
    71 
    71 
    72 
    72 @pagelet_config(name='add-users-folder.html', context=ISite, layer=IPyAMSLayer,
    73 @pagelet_config(name='add-users-folder.html', context=ISite, layer=IPyAMSLayer,
    73                 permission='system.manage')
    74                 permission=MANAGE_SYSTEM_PERMISSION)
    74 class UsersFolderAddForm(AdminDialogAddForm):
    75 class UsersFolderAddForm(AdminDialogAddForm):
    75     """Users folder plug-in add form"""
    76     """Users folder plug-in add form"""
    76 
    77 
    77     title = _("System security manager")
    78     title = _("System security manager")
    78     legend = _("Add local users folder plug-in")
    79     legend = _("Add local users folder plug-in")
    79     icon_css_class = 'fa fa-fw fa-user'
    80     icon_css_class = 'fa fa-fw fa-user'
    80 
    81 
    81     fields = field.Fields(IUsersFolderPlugin).omit('__name__', '__parent__')
    82     fields = field.Fields(IUsersFolderPlugin).omit('__name__', '__parent__')
    82     ajax_handler = 'add-users-folder.json'
    83     ajax_handler = 'add-users-folder.json'
    83     edit_permission = 'system.manage'
    84     edit_permission = MANAGE_SYSTEM_PERMISSION
    84 
    85 
    85     def create(self, data):
    86     def create(self, data):
    86         return UsersFolder()
    87         return UsersFolder()
    87 
    88 
    88     def add(self, plugin):
    89     def add(self, plugin):
   101     if prefix in manager:
   102     if prefix in manager:
   102         event.form.widgets.errors += (Invalid(_("Specified prefix is already used!")),)
   103         event.form.widgets.errors += (Invalid(_("Specified prefix is already used!")),)
   103 
   104 
   104 
   105 
   105 @view_config(name='add-users-folder.json', context=ISite, request_type=IPyAMSLayer,
   106 @view_config(name='add-users-folder.json', context=ISite, request_type=IPyAMSLayer,
   106              permission='system.manage', renderer='json', xhr=True)
   107              permission=MANAGE_SYSTEM_PERMISSION, renderer='json', xhr=True)
   107 class UsersFolderAJAXAddForm(AJAXAddForm, UsersFolderAddForm):
   108 class UsersFolderAJAXAddForm(AJAXAddForm, UsersFolderAddForm):
   108     """users folder plug-in add form, AJAX handler"""
   109     """users folder plug-in add form, AJAX handler"""
   109 
   110 
   110 
   111 
   111 @pagelet_config(name='properties.html', context=IUsersFolderPlugin, layer=IPyAMSLayer,
   112 @pagelet_config(name='properties.html', context=IUsersFolderPlugin, layer=IPyAMSLayer,
   112                 permission='system.view')
   113                 permission=VIEW_SYSTEM_PERMISSION)
   113 class UsersFolderEditForm(AdminDialogEditForm):
   114 class UsersFolderEditForm(AdminDialogEditForm):
   114     """Users folder plug-in edit form"""
   115     """Users folder plug-in edit form"""
   115 
   116 
   116     @property
   117     @property
   117     def title(self):
   118     def title(self):
   120     legend = _("Edit local users folder plug-in properties")
   121     legend = _("Edit local users folder plug-in properties")
   121     icon_css_class = 'fa fa-fw fa-user'
   122     icon_css_class = 'fa fa-fw fa-user'
   122 
   123 
   123     fields = field.Fields(IUsersFolderPlugin).omit('__name__', '__parent__')
   124     fields = field.Fields(IUsersFolderPlugin).omit('__name__', '__parent__')
   124     ajax_handler = 'properties.json'
   125     ajax_handler = 'properties.json'
   125     edit_permission = 'system.manage'
   126     edit_permission = MANAGE_SYSTEM_PERMISSION
   126 
   127 
   127     def updateWidgets(self, prefix=None):
   128     def updateWidgets(self, prefix=None):
   128         super(UsersFolderEditForm, self).updateWidgets()
   129         super(UsersFolderEditForm, self).updateWidgets()
   129         self.widgets['prefix'].mode = DISPLAY_MODE
   130         self.widgets['prefix'].mode = DISPLAY_MODE
   130 
   131 
   131 
   132 
   132 @view_config(name='properties.json', context=IUsersFolderPlugin, request_type=IPyAMSLayer,
   133 @view_config(name='properties.json', context=IUsersFolderPlugin, request_type=IPyAMSLayer,
   133              permission='system.manage', renderer='json', xhr=True)
   134              permission=MANAGE_SYSTEM_PERMISSION, renderer='json', xhr=True)
   134 class UsersFolderAJAXEditForm(AJAXEditForm, UsersFolderEditForm):
   135 class UsersFolderAJAXEditForm(AJAXEditForm, UsersFolderEditForm):
   135     """Users folder plug-in edit form, AJAX handler"""
   136     """Users folder plug-in edit form, AJAX handler"""
   136 
   137 
   137 
   138 
   138 #
   139 #
   139 # Users folder search views
   140 # Users folder search views
   140 #
   141 #
   141 
   142 
   142 @pagelet_config(name='search.html', context=IUsersFolderPlugin, layer=IPyAMSLayer, permission='system.view')
   143 @pagelet_config(name='search.html', context=IUsersFolderPlugin, layer=IPyAMSLayer, permission=VIEW_SYSTEM_PERMISSION)
   143 class UsersFolderSearchView(AdminView, SearchView):
   144 class UsersFolderSearchView(AdminView, SearchView):
   144     """Users folder search view"""
   145     """Users folder search view"""
   145     
   146     
   146     def __init__(self, context, request):
   147     def __init__(self, context, request):
   147         super(UsersFolderSearchView, self).__init__(context, request)
   148         super(UsersFolderSearchView, self).__init__(context, request)
   159     def subtitle(self):
   160     def subtitle(self):
   160         return self.context.title
   161         return self.context.title
   161 
   162 
   162 
   163 
   163 @view_config(name='search-results.html', context=IUsersFolderPlugin, request_type=IPyAMSLayer,
   164 @view_config(name='search-results.html', context=IUsersFolderPlugin, request_type=IPyAMSLayer,
   164              permission='system.view')
   165              permission=VIEW_SYSTEM_PERMISSION)
   165 class UsersFolderSearchResultsView(AdminView, SearchResultsView):
   166 class UsersFolderSearchResultsView(AdminView, SearchResultsView):
   166     """Users folder search results view table"""
   167     """Users folder search results view table"""
   167 
   168 
   168     id = 'users_folder_search_table'
   169     id = 'users_folder_search_table'
   169     title = _("Search results")
   170     title = _("Search results")
   239 # Users views
   240 # Users views
   240 #
   241 #
   241 
   242 
   242 @viewlet_config(name='users-folder.toolbar.adding', context=IUsersFolderPlugin,
   243 @viewlet_config(name='users-folder.toolbar.adding', context=IUsersFolderPlugin,
   243                 view=UsersFolderSearchView.search_form_factory, layer=IAdminLayer,
   244                 view=UsersFolderSearchView.search_form_factory, layer=IAdminLayer,
   244                 manager=IWidgetTitleViewletManager, permission='system.manage')
   245                 manager=IWidgetTitleViewletManager, permission=MANAGE_SYSTEM_PERMISSION)
   245 class LocalUserAddAction(ToolbarAction):
   246 class LocalUserAddAction(ToolbarAction):
   246     """Users folder adding action"""
   247     """Users folder adding action"""
   247 
   248 
   248     label = _("Add user")
   249     label = _("Add user")
   249     url = 'add-user.html'
   250     url = 'add-user.html'
   250     modal_target = True
   251     modal_target = True
   251 
   252 
   252 
   253 
   253 @pagelet_config(name='add-user.html', context=IUsersFolderPlugin, layer=IPyAMSLayer, permission='system.manage')
   254 @pagelet_config(name='add-user.html', context=IUsersFolderPlugin, layer=IPyAMSLayer,
       
   255                 permission=MANAGE_SYSTEM_PERMISSION)
   254 class LocalUserAddForm(AdminDialogAddForm):
   256 class LocalUserAddForm(AdminDialogAddForm):
   255     """Local user add form"""
   257     """Local user add form"""
   256 
   258 
   257     @property
   259     @property
   258     def title(self):
   260     def title(self):
   268         field.Fields(IUserRegistrationInfo).select('password', 'confirmed_password') + \
   270         field.Fields(IUserRegistrationInfo).select('password', 'confirmed_password') + \
   269         field.Fields(ILocalUser).select('wait_confirmation')
   271         field.Fields(ILocalUser).select('wait_confirmation')
   270 
   272 
   271     autocomplete = 'off'
   273     autocomplete = 'off'
   272     ajax_handler = 'add-user.json'
   274     ajax_handler = 'add-user.json'
   273     edit_permission = 'system.manage'
   275     edit_permission = MANAGE_SYSTEM_PERMISSION
   274 
   276 
   275     def updateWidgets(self, prefix=None):
   277     def updateWidgets(self, prefix=None):
   276         super(LocalUserAddForm, self).updateWidgets()
   278         super(LocalUserAddForm, self).updateWidgets()
   277         self.widgets['password'].input_css_class = 'col-md-4'
   279         self.widgets['password'].input_css_class = 'col-md-4'
   278         self.widgets['confirmed_password'].input_css_class = 'col-md-4'
   280         self.widgets['confirmed_password'].input_css_class = 'col-md-4'
   310     if not folder.check_login(data.get('login')):
   312     if not folder.check_login(data.get('login')):
   311         event.form.widgets.errors += (Invalid(_("Specified login can't be used!")),)
   313         event.form.widgets.errors += (Invalid(_("Specified login can't be used!")),)
   312 
   314 
   313 
   315 
   314 @view_config(name='add-user.json', context=IUsersFolderPlugin, request_type=IPyAMSLayer,
   316 @view_config(name='add-user.json', context=IUsersFolderPlugin, request_type=IPyAMSLayer,
   315              permission='system.manage', renderer='json', xhr=True)
   317              permission=MANAGE_SYSTEM_PERMISSION, renderer='json', xhr=True)
   316 class LocalUserAJAXAddForm(AJAXAddForm, LocalUserAddForm):
   318 class LocalUserAJAXAddForm(AJAXAddForm, LocalUserAddForm):
   317     """Local user add form, AJAX view"""
   319     """Local user add form, AJAX view"""
   318 
   320 
   319     def get_ajax_output(self, changes):
   321     def get_ajax_output(self, changes):
   320         translate = self.request.localizer.translate
   322         translate = self.request.localizer.translate
   321         return {'status': 'success',
   323         return {'status': 'success',
   322                 'message': translate(_("User was created successfully"))}
   324                 'message': translate(_("User was created successfully"))}
   323 
   325 
   324 
   326 
   325 @pagelet_config(name='properties.html', context=ILocalUser, layer=IPyAMSLayer, permission='system.view')
   327 @pagelet_config(name='properties.html', context=ILocalUser, layer=IPyAMSLayer, permission=VIEW_SYSTEM_PERMISSION)
   326 class LocalUserEditForm(AdminDialogEditForm):
   328 class LocalUserEditForm(AdminDialogEditForm):
   327     """Local user edit form"""
   329     """Local user edit form"""
   328 
   330 
   329     @property
   331     @property
   330     def title(self):
   332     def title(self):
   337 
   339 
   338     fields = field.Fields(ILocalUser).select('login', 'email', 'firstname', 'lastname', 'company_name',
   340     fields = field.Fields(ILocalUser).select('login', 'email', 'firstname', 'lastname', 'company_name',
   339                                              'self_registered', 'activation_hash', 'activation_date')
   341                                              'self_registered', 'activation_hash', 'activation_date')
   340 
   342 
   341     ajax_handler = 'properties.json'
   343     ajax_handler = 'properties.json'
   342     edit_permission = 'system.manage'
   344     edit_permission = MANAGE_SYSTEM_PERMISSION
   343 
   345 
   344     def updateWidgets(self, prefix=None):
   346     def updateWidgets(self, prefix=None):
   345         super(LocalUserEditForm, self).updateWidgets()
   347         super(LocalUserEditForm, self).updateWidgets()
   346         self.widgets['self_registered'].mode = DISPLAY_MODE
   348         self.widgets['self_registered'].mode = DISPLAY_MODE
   347         self.widgets['activation_hash'].mode = DISPLAY_MODE
   349         self.widgets['activation_hash'].mode = DISPLAY_MODE
   348         self.widgets['activation_date'].mode = DISPLAY_MODE
   350         self.widgets['activation_date'].mode = DISPLAY_MODE
   349 
   351 
   350 
   352 
   351 @view_config(name='properties.json', context=ILocalUser, request_type=IPyAMSLayer,
   353 @view_config(name='properties.json', context=ILocalUser, request_type=IPyAMSLayer,
   352              permission='system.manage', renderer='json', xhr=True)
   354              permission=MANAGE_SYSTEM_PERMISSION, renderer='json', xhr=True)
   353 class LocalUserAJAXEditForm(AJAXEditForm, LocalUserEditForm):
   355 class LocalUserAJAXEditForm(AJAXEditForm, LocalUserEditForm):
   354     """Local user edit form, AJAX view"""
   356     """Local user edit form, AJAX view"""