def authenticateCredentials(self, credentials): """ See IAuthenticationPlugin. o We expect the credentials to be those returned by ILoginPasswordExtractionPlugin. """ login = credentials.get('login') password = credentials.get('password') if login is None or password is None: return None # We can't depend on security when authenticating the user, # or we'll get stuck in loops mbtool = getToolByName(self, TOOLNAME) member = mbtool.getUserAuthProvider(login) if member is None: return None # Check workflow state is active wftool = getToolByName(self, 'portal_workflow') review_state = wftool.getInfoFor(member, 'review_state') wfmapper = ICategoryMapper(mbtool) cat_set = generateCategorySetIdForType(member.portal_type) if not wfmapper.isInCategory(cat_set, ACTIVE_STATUS_CATEGORY, review_state): return None # Delegate to member object member = IMembraneUserAuth(member) return member.authenticateCredentials(credentials)
def getRoles(self): """Get roles for this team-group. Return an empty list of roles if the team is in a workflow state that is not active in membrane_tool. """ mb = getToolByName(self.context, MEMBRANE_TOOL) wf = getToolByName(self.context, "portal_workflow") reviewState = wf.getInfoFor(self.context, "review_state") wfmapper = ICategoryMapper(mb) categories = generateCategorySetIdForType(self.context.portal_type) if wfmapper.isInCategory(categories, ACTIVE_STATUS_CATEGORY, reviewState): return self.context.getRoles() else: return ()
def testStatusCategoriesAreInitialized(self): mt = getattr(self.portal, TOOLNAME) cat_map = ICategoryMapper(mt) for pt in ['TestMember', 'TestGroup']: cat_set = generateCategorySetIdForType(pt) self.failUnless(cat_map.hasCategorySet(cat_set)) self.failUnless(cat_map.hasCategory(cat_set, ACTIVE_STATUS_CATEGORY)) wft = getattr(self.portal, 'portal_workflow') chain = wft.getChainForPortalType(pt) for wfid in chain: wf = getattr(wft, wfid) states = wf.states.objectIds() for state in states: self.failUnless(cat_map.isInCategory(cat_set, ACTIVE_STATUS_CATEGORY, state))
class TestCategoryMapper(ZopeTestCase.ZopeTestCase): layer = ZCMLLayer def afterSetUp(self): self.obj = Foo() self.cat_map = ICategoryMapper(self.obj) def testAddCategorySet(self): cat_set = 'category_set' self.cat_map.addCategorySet(cat_set) self.failUnless(self.cat_map.hasCategorySet(cat_set)) self.failUnless(cat_set in self.cat_map.listCategorySets()) def testDelCategorySet(self): cat_set = 'category_set' self.cat_map.addCategorySet(cat_set) self.failUnless(self.cat_map.hasCategorySet(cat_set)) self.cat_map.delCategorySet(cat_set) self.failIf(self.cat_map.hasCategorySet(cat_set)) self.failUnless(len(self.cat_map.listCategorySets()) == 0) def testAddCategory(self): cat_set1 = 'category_set1' cat_set2 = 'category_set2' cat = 'category' self.cat_map.addCategorySet(cat_set1) self.cat_map.addCategorySet(cat_set2) self.cat_map.addCategory(cat_set1, cat) self.failUnless(self.cat_map.hasCategory(cat_set1, cat)) self.failIf(self.cat_map.hasCategory(cat_set2, cat)) def testMissingCatSetRaisesError(self): self.assertRaises(KeyError, self.cat_map.addToCategory, self.cat_map, 'category_set', 'category') self.assertRaises(KeyError, self.cat_map.removeFromCategory, self.cat_map, 'category_set', 'category') def testMissingCategoryRaisesError(self): cat_set = 'category_set' self.cat_map.addCategorySet(cat_set) self.assertRaises(KeyError, self.cat_map.addToCategory, self.cat_map, cat_set, 'category') self.assertRaises(KeyError, self.cat_map.removeFromCategory, self.cat_map, cat_set, 'category') def testAddToCategory(self): cat_set = 'category_set' cat1 = 'category1' cat2 = 'category2' datum1 = 'datum1' datum2 = 'datum2' self.cat_map.addCategorySet(cat_set) self.cat_map.addCategory(cat_set, cat1) self.cat_map.addCategory(cat_set, cat2) self.cat_map.addToCategory(cat_set, cat1, datum1) self.failUnless(self.cat_map.isInCategory(cat_set, cat1, datum1)) self.failIf(self.cat_map.isInCategory(cat_set, cat1, datum2)) self.failIf(self.cat_map.isInCategory(cat_set, cat2, datum1)) self.cat_map.addToCategory(cat_set, cat1, datum2) self.failUnless(self.cat_map.isInCategory(cat_set, cat1, datum1)) self.failUnless(self.cat_map.isInCategory(cat_set, cat1, datum2)) self.failUnless(set([datum1, datum2]) == \ set(self.cat_map.listCategoryValues(cat_set, cat1))) def testRemoveFromCategory(self): cat_set = 'category_set' cat = 'category' datum1 = 'datum1' datum2 = 'datum2' self.cat_map.addCategorySet(cat_set) self.cat_map.addCategory(cat_set, cat) self.cat_map.addToCategory(cat_set, cat, datum1) self.cat_map.addToCategory(cat_set, cat, datum2) self.failUnless(set([datum1, datum2]) == \ set(self.cat_map.listCategoryValues(cat_set, cat))) self.cat_map.removeFromCategory(cat_set, cat, datum1) self.failIf(self.cat_map.isInCategory(cat_set, cat, datum1)) self.failUnless(self.cat_map.isInCategory(cat_set, cat, datum2)) self.failUnless(set([datum2]) == \ set(self.cat_map.listCategoryValues(cat_set, cat)))