Skip to content
This repository was archived by the owner on Jan 28, 2026. It is now read-only.

Commit 82594f7

Browse files
authored
Merge pull request #23 from eea/develop
Develop
2 parents bb09baa + b31682c commit 82594f7

8 files changed

Lines changed: 60 additions & 196 deletions

File tree

docs/HISTORY.txt

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,17 @@
11
Changelog
22
=========
33

4+
2.5 - (2021-01-09)
5+
---------------------------
6+
* remove NFP edit permission on "own country" users [dumitval]
7+
* move _is_authenticated to eea.ldapadmin.logic_common [dumitval]
8+
* move _get_ldap_agent eea.ldapadmin.ldap_config [dumitval]
9+
* move logged_in_user, nfp_for_country to eea.ldapadmin.ui_common [dumitval]
10+
* removed _get_user_id duplicate of logged_in_user [dumitval]
11+
* give NFPs access to the details page of disabled users [dumitval]
12+
* remove obsolete Circa-related code [dumitval]
13+
* fix tests [dumitval]
14+
415
2.4 - (2020-12-04)
516
---------------------------
617
* add some privileges for NFPs on the user details page

eea/userseditor/tests/test_ui.py

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,6 @@ def base_setup(context, user):
5959
# context.mock_agent._encoding = 'utf-8'
6060
# context.mock_agent.role_leaders = Mock(return_value=([], []))
6161
# context.mock_agent.role_infos_in_role.return_value = {}
62-
# context.ui._get_ldap_agent = Mock(return_value=context.mock_agent)
6362
# context.ui.can_delete_role = Mock(return_value=True)
6463
# context.ui.can_edit_members = Mock(return_value=True)
6564
# context.ui.can_edit_organisations = Mock(return_value=True)
@@ -71,12 +70,13 @@ def base_setup(context, user):
7170
context.request.RESPONSE.redirect = Mock()
7271
context.request.RESPONSE.setStatus = Mock()
7372
context.REQUEST.AUTHENTICATED_USER = user
74-
user.getRoles = Mock(return_value=['Authenticated'])
7573
context.mailhost = getUtility(IMailHost)
7674
registry = getUtility(IRegistry)
7775
registry["plone.email_from_address"] = "user-directory@plone.org"
7876
registry["plone.email_from_name"] = u"Plone test site"
7977
context.mock_agent = MockLdapAgent()
78+
context.mock_agent.filter_roles.return_value = []
79+
context.ui._get_ldap_agent = Mock(return_value=context.mock_agent)
8080

8181

8282
def parse_html(html):
@@ -210,6 +210,7 @@ def setUp(self):
210210
self.mock_agent.org_info = Mock(return_value=org_data_fixture)
211211
self.mock_agent.filter_roles.return_value = []
212212
self.ui._get_ldap_agent = Mock(return_value=self.mock_agent)
213+
user.getRoles = Mock(return_value=['Authenticated'])
213214

214215
def test_edit_form(self):
215216
"""test_edit_form."""
@@ -348,6 +349,7 @@ def setUp(self):
348349
'text_native': '', 'ldap': False}
349350
])
350351
self.mock_agent.org_info = Mock(return_value=org_data_fixture)
352+
user.getRoles = Mock(return_value=['Anonymous'])
351353

352354
def _assert_error_msg_on_index(self):
353355
"""_assert_error_msg_on_index."""
@@ -366,8 +368,10 @@ def test_main_page(self):
366368
"You must be authenticated to edit your profile. "
367369
"Please log in.")
368370

369-
def test_edit_form(self):
371+
@patch('eea.ldapadmin.nfp_nrc.get_nrc_roles')
372+
def test_edit_form(self, mock_nrc_roles):
370373
"""test_edit_form."""
374+
mock_nrc_roles.return_value = []
371375
self.ui.edit_account_html(self.request)
372376
self.request.RESPONSE.redirect.assert_called_with('URL/')
373377
self._assert_error_msg_on_index()
@@ -402,6 +406,7 @@ def setUp(self):
402406
'poker_club': {'name': 'Poker club',
403407
'name_native': 'Poker club', 'country': 'eu'}}
404408
self.mock_agent.all_organisations = Mock(return_value=all_orgs)
409+
user.getRoles = Mock(return_value=['Authenticated'])
405410

406411
def test_show_by_id(self):
407412
"""test_show_by_id."""

eea/userseditor/userdetails.py

Lines changed: 5 additions & 75 deletions
Original file line numberDiff line numberDiff line change
@@ -12,14 +12,15 @@
1212
from Acquisition import Implicit
1313
from App.config import getConfiguration
1414
from eea.ldapadmin import ldap_config
15-
from eea.ldapadmin.ui_common import nfp_for_country
15+
from eea.ldapadmin.ldap_config import _get_ldap_agent
16+
from eea.ldapadmin.logic_common import _is_authenticated
1617
from eea.userseditor.permissions import EIONET_EDIT_USERS
18+
from eea.userseditor.users_editor import load_template
1719
from ldap import SCOPE_BASE
1820
from OFS.PropertyManager import PropertyManager
1921
from OFS.SimpleItem import SimpleItem
2022
from persistent.mapping import PersistentMapping
2123
from Products.PageTemplates.PageTemplateFile import PageTemplateFile
22-
from z3c.pt.pagetemplate import PageTemplateFile as ChameleonTemplate
2324

2425
cfg = getConfiguration()
2526
if hasattr(cfg, 'environment'):
@@ -47,33 +48,6 @@ def manage_add_userdetails(parent, tool_id, REQUEST=None):
4748
REQUEST.RESPONSE.redirect(parent.absolute_url() + '/manage_workspace')
4849

4950

50-
def _is_authenticated(request):
51-
"""_is_authenticated.
52-
53-
:param request:
54-
"""
55-
return 'Authenticated' in request.AUTHENTICATED_USER.getRoles()
56-
57-
58-
def load_template(name, context=None, _memo={}):
59-
"""load_template.
60-
61-
:param name:
62-
:param context:
63-
:param _memo:
64-
"""
65-
if name not in _memo:
66-
tpl = ChameleonTemplate(name)
67-
68-
if context is not None:
69-
bound = tpl.bind(context)
70-
_memo[name] = bound
71-
else:
72-
_memo[name] = tpl
73-
74-
return _memo[name]
75-
76-
7751
zope2_wrapper = PageTemplateFile('zpt/zope2_wrapper.zpt', globals())
7852
plone5_wrapper = PageTemplateFile('zpt/plone5_wrapper.zpt', globals())
7953

@@ -179,22 +153,6 @@ def can_edit_users(self):
179153

180154
return bool(user.has_permission(EIONET_EDIT_USERS, self.context))
181155

182-
def can_edit_user(self):
183-
""" Check if the authenticated user has permission to edit this
184-
particular user. (meaning has general edit permission or
185-
the authenticated user is NFP in the country of the user's
186-
organisation)."""
187-
if self.can_edit_users():
188-
return True
189-
uid = self.context.REQUEST.AUTHENTICATED_USER.getId()
190-
nfp_country = nfp_for_country(self.context)
191-
if nfp_country:
192-
agent = self.context._get_ldap_agent()
193-
for org in agent.orgs_for_user(uid):
194-
if agent.org_info(org[0])['country'] == nfp_country:
195-
return True
196-
return False
197-
198156
def can_view_roles(self):
199157
"""can_view_roles."""
200158
if not self.is_authenticated():
@@ -223,22 +181,6 @@ def network_name(self):
223181
return NETWORK_NAME
224182

225183

226-
def logged_in_user(request):
227-
"""logged_in_user.
228-
229-
:param request:
230-
"""
231-
user_id = ''
232-
233-
if _is_authenticated(request):
234-
user = request.get('AUTHENTICATED_USER', '')
235-
236-
if user:
237-
user_id = user.getId()
238-
239-
return user_id
240-
241-
242184
class UserDetails(SimpleItem):
243185
"""UserDetails."""
244186

@@ -278,20 +220,8 @@ def __init__(self, config={}):
278220
self._config = PersistentMapping(config)
279221

280222
def _get_ldap_agent(self, bind=True, secondary=False):
281-
"""_get_ldap_agent.
282-
283-
:param bind:
284-
:param secondary: bind with alternate credentials for different
285-
permissions
286-
"""
287-
agent = ldap_config.ldap_agent_with_config(self._config, bind,
288-
secondary=secondary)
289-
try:
290-
agent._author = logged_in_user(self.REQUEST)
291-
except AttributeError:
292-
agent._author = "System user"
293-
294-
return agent
223+
""" get the ldap agent """
224+
return _get_ldap_agent(self, bind, secondary)
295225

296226
def _prepare_user_page(self, uid):
297227
"""Shared by index_html and simple_profile"""

0 commit comments

Comments
 (0)