[Zope3-Users] Assigning programmatically a Role to a Principal

Jens adner at fh-schmalkalden.de
Fri Jun 5 02:40:38 EDT 2009


in grok I do:

@grok.subscribe(IPrincipalCreated)
def update_principal_info(event):
 principal = event.principal
 ...
 app = grok.getSite()
 ...
 prm = IPrincipalRoleManager(app)
 prm.assignRoleToPrincipal('some_role', principal.id)

somthing like this.

maybe in zope3 this is similar.

Jens

Simon Elbaz schrieb:
> Hi,
> I have a similar difficulty.
> 
> In site.zcml, the role 'zope.Member' is defined and a permission is granted:
> <role id="zope.Member" title="Site Member" />
> <grant permission="zope.View"
>          role="zope.Member" />
> 
> How can I assign a role to a principal who is created on the fly:
> a_principal =
> zope.app.authentication.principalfolder.InternalPrincipal(login=tab[0].encode('utf-8'),
> password=tab[1].encode('utf-8'), title=a_title.encode('utf-8'),
> passwordManagerName='SHA1')
> a_auth_plugin =
> getUtility(zope.app.authentication.interfaces.IAuthenticatorPlugin,
> 'myAuthenticatorPlugin')
> role_map = IPrincipalRoleManager(a_auth_plugin)          
> role_map.assignRoleToPrincipal('zope.Member', a_principal.login)
> a_auth_plugin[a_principal.title] = a_principal
> 
> I verify that the role is assigned:
>             interaction =    
> zope.securitypolicy.zopepolicy.ZopeSecurityPolicy()
> print interaction.checkPermission(a_principal, a_auth_plugin)
>>>> True
> 
> But when I want to access the page defined below, it returns 'Unauthorized':
> <page
>       name="login.html"
>       for="zope.app.folder.interfaces.IFolder"
>       permission="zope.View"
>           layer="cdcadama.layer.ICdcadamaBrowserLayer"
>       class=".login.LoginAddForm"
> />
> 
> Thanks for your help
> Simon
> 
> 
> On Tue, May 12, 2009 at 12:34 PM, Massimiliano della Rovere
> <massimiliano.dellarovere at gmail.com
> <mailto:massimiliano.dellarovere at gmail.com>> wrote:
> 
>     I had a similar problem.
>     My mistake was that I forgot the application prefix in the
>     event.principal.id <http://event.principal.id>. (so instead of user
>     app.XYZ I used only XYZ, which
>     was not found in the PrincipalFolder).
> 
> 
>     On Tue, May 12, 2009 at 12:18, Thierry Florac <thierry.florac at onf.fr
>     <mailto:thierry.florac at onf.fr>> wrote:
>     > Le mardi 12 mai 2009,
>     >  paftek <paftek at gmail.com <mailto:paftek at gmail.com>> a écrit :
>     > ======================================================================
>     >> I created a Role and a Permission affected to it :
>     >> <role id="app.User" title="Utilisateur" />
>     >> <permission id="app.Auth" title="Utilisateur authentifié" />
>     >> <grant permission="app.Auth" role="app.User" />
>     >>
>     >> My users are store in a PostgreSQL database, not in the ZODB.
>     >> I use the Zope authentication system to return a PrincipalInfo
>     when an
>     >> user log in.
>     >>
>     >> I do not know how to assign my "app.User" Role to the Principal who
>     >> log in. I tried the following, without success :
>     >>
>     >> @adapter(IAuthenticatedPrincipalCreated)
>     >> def setPermission(event):
>     >>     role_map = IPrincipalRoleManager(getSiteManager())
>     >>     role_map.assignRoleToPrincipal('app.User', event.principal.id
>     <http://event.principal.id>)
>     > ======================================================================
>     >
>     > Hi,
>     >
>     > What do you mean when you say "without success" ?
>     > What do you get when you look at the "@@grant.html" view over your
>     > context ??
>     >
>     > Thierry
>     > --
>     > Chef de projets intranet/internet
>     > Office National des Forêts - Département Informatique
>     > 2, Avenue de Saint-Mandé
>     > 75570 Paris Cedex 12
>     > Tél. : 01 40 19 59 64
>     > Fax. : 01 40 19 58 85
>     > Mél. : thierry.florac at onf.fr <mailto:thierry.florac at onf.fr>
>     > Web. : http://www.onf.fr
>     >
>     > _______________________________________________
>     > Zope3-users mailing list
>     > Zope3-users at zope.org <mailto:Zope3-users at zope.org>
>     > http://mail.zope.org/mailman/listinfo/zope3-users
>     >
>     _______________________________________________
>     Zope3-users mailing list
>     Zope3-users at zope.org <mailto:Zope3-users at zope.org>
>     http://mail.zope.org/mailman/listinfo/zope3-users
> 
> 
> 
> ------------------------------------------------------------------------
> 
> _______________________________________________
> Zope3-users mailing list
> Zope3-users at zope.org
> http://mail.zope.org/mailman/listinfo/zope3-users


More information about the Zope3-users mailing list