[Zope] Re: Zope Permissions

Butch Landingin butchland@yahoo.com
Tue, 14 Sep 1999 15:31:32 -0700 (PDT)


This is the same message, but I think the python code is now
correctly formatted:

------- On Mon, 13 Sep 1999 17:34:23, Katrin
<katrin@beehive.de> wrote:

> hi everybody!
>
> i have a little problem with permission settings.
>
> i'm writing a product in python. the product installs dtml methods when
> installed in a folder. now i want zope to ask for the user name and the
> password when a certain page is rendered as an URL (zope doesn't have a user name yet).
>
>i found out that in order to get the zope login
window, i have to uncheck the view permission of the page (i mean the checkbox for
> acquire permission settings). how can i uncheck the box
> using python in my product? or how can i delete the view permission
> for this page in my product?

If I understand your problem correctly, you want to
install the DTML method to have the acquired
permissions for View permission unchecked, and then 
 
(I guess,) enabled view permission for some role
which you have defined a set of users for?
I did something like this with some Python code in a
homegrown user authentication class I've been
playing around with:

     # remove view and access permissions from  acquired permissions and anonymous role
     acq_permissions = your_method.permission_settings()
     new_permissions = []
     for d in acq_permissions:
        if d['name'] != 'View':
           new_permissions.append(d['name'])
     your_method.manage_acquiredPermissions(new_permissions)  
     your_method.manage_role(role_to_manage='Anonymous',permissions=new_permissions)

Basically, what it is doing is:
 
    1. get the current list of acquired permissions
       from your dtml_method (<object>.permission_settings())

    2. create a new list of permissions without the
       View permission (that's the what the loop is doing)    
       -- you could also just create a hardcoded list and not
       have to  loop (then you don't have to do the first
       step too)
 
    3. set your object's acquired permissions using
       (<object>.manage_acquiredPermissions(new_permissions)

    4. set the anonymous role's permissions to the
       the new permissions (w/o the View permission)
       (<object>.manage_role(role_to_manage='Anonymous',permissions=new_permissions))

    5. You also probably need add a step to add view
       permissions for some role (i.e. Manager) so that they
       have the view permission to access your method using the manage_role method
       (<object>.manage_role(role_to_manage='Manager',permissions=['View','View Management',...])

If you are writing your constructor method in DTML,
you probably could use the same methods that I used. The
only complication I see in writing it with DTML is
implementing the loop (which could be circumvented
if you use a hardcoded list)...
 
Hope this helps.
 
Best regards,
 
Butch Landingin
butchland@yahoo.com

__________________________________________________
Do You Yahoo!?
Bid and sell for free at http://auctions.yahoo.com