Re: Feedback on upcoming permission features

Georg Lehner <[email protected]>
Newsgroups gmane.comp.bug-tracking.roundup.user
Organization MagmaSoft
Message-ID <[email protected]>
Hello John,

This additional functionality is great, I already have respective use cases.

No idea if this breaks something elsewhere, on my plain simple setups it 
does not.

Best Regards,

   Georg Lehner


On 03/14/2017 10:39 AM, John P. Rouillard wrote:
> Hi all:
>
> I just wanted to discuss a couple of changes to permissions
> that are planned for the next release. One is already in the
> repository and the other one I plan on pushing this weekend.
>
> One of the difficulties with roundup is getting the security
> model and permissions set up just right. I hope these
> changes will make that easier. I have a tracker that uses
> both of these features and it made implementing the security
> model much easier for me.
>
> The first change, that is in the repository, deals with the
> check function assigned to permissions.  The check function
> is defined as:
>
>   check(db, userid, itemid)
>
> The problem with this is that you are missing context about the
> permission test that you may want to use E.G.:
>
>    is this a search on a property or on the class
>    what class is this applied to
>    what permission is being checked
>
> Having this info allows you to:
>
>    allow access to a property but denying access to a
>        class (more about this case below)
>
>    write a single function that applies similar logic to
>        different (Edit and View for example) permissions
>
>    write a function that applies similar logic to multiple
>        classes
>
> If you change your check function definition to:
>
>   check(db, userid, itemid, **context)
>
> Adding **context provides the following values in the context
> dictionary:
>
>    context['property'] the name of the property being
>        checked or None if it's a class check.
>
>    context['classname'] the name of the class that is being
>        checked (issue, query ....).
>
>    context['permission'] the name of the permission
>        (e.g. View, Edit...).
>
> Note this is optional. The three argument form of check
> commands will continue to work as they always have. You do
> not need to change your schema unless you want this feature.
>
> The second (pending) change is a simpler way to limit
> permission tests so they apply only to properties. Note that
> permissions defined with a prperty list also apply to
> non-property tests.
>
> Define a permission like:
>
>   db.security.addPermission(name='View', klass='user',
>     properties=('activity', 'id', 'organisation', 'phone', 'realname',
>             'timezone', 'username', 'email', 'alternate_addresses'),
>     check=is_this_groups_admin,
>     description="Group admins can have expanded view of other users")
>
> and assign it to a role. This role can view the properties
> of the user class, but they *also inherit the ability to
> view* the user class.
>
> This makes sense since the usual way to view those
> properties is by looking at the user class (to get an index
> page) or to look at specific user (e.g. user3). When a user
> looks at an index or item page, any properties that are not
> listed in the permission above are displayed as [hidden].
>
> However suppose you want to hide the user class entirely
> from a role while allowing the role to read just a
> particular property.
>
> I wanted to deny access to the user class for the anonymous
> user/role (including for its user item).  However I wanted
> the anonymous user to have access to the theme property in
> its user item.  I wanted attempts by anonymous to look at
> tracker/user or tracker/user2 (the anonymous user) to look
> like anonymous had no access to the user class at all.
>
> I could change the user templates and change the
> tal:condition="context/is_view_ok" to check specifically for
> the anonymous user, but that gets out of hand quickly.
>
> I could rewrite the check function to use the new context
> argument.  So the check function would look to see if the
> user was anonymous and if there was no property specified, I
> could deny access.
>
> This could be done, but I also had the feeling that this is
> something that should happen at the permission level and not
> at a check function.
>
> So I have added a new optional argument to the permission
> functions:
>
>    props_only = True or False
>
> If this is not specified, it acts as though the value is
> False. This keeps the current behavior and permits a user to
> access a class if they can access a property on that class.
> So you don't need to change anything if you don't want the
> feature.
>
> For my use case above, I can make the permission apply only
> to property checks by using:
>
>   db.security.addPermission(name='View', klass='user',
>     properties=['theme'], check=own_record,
>     description="User is allowed to view their own theme",
>     props_only=True)
>                                        example 1
>
> There is also a method to change the default value of the
> props_only. Calling:
>
>   db.security.set_props_only_default(True)
>
> in schema.py makes all permissions that include properties
> apply only when checking properties. They are never checked
> when determining access rights for the class. Using this I
> could have written example 1 using:
>
>   db.security.set_props_only_default(True)
>
>   db.security.addPermission(name='View', klass='user',
>     properties=['theme'], check=own_record,
>     description="User is allowed to view their own theme")
>
>   # other permissions with properties defined here will apply only
>   # to property access tests
>
>   db.security.set_props_only_default(False)
>
>   # permissions with properties defined here will apply for
>   # property access tests and for class access tests
>
> This code has not yet made it to the repository, but I am
> interested in feedback on both of these methods.
>
> There is one non-optional change. The output of roundup-admin security
> will change. Rather than seeing:
>
>  User is allowed to Search queries for creator
>       (Search for "query": ['creator'] only)
>
> the final word "only" will only show up with properties if
> props_only=True.  Does this break anybody's scripts that use
> the security command?
>
> Do these changes address any issues you have had writing
> permissions?  Will they make it easier to write permissions?
>
> Feedback welcome.
>
> --
> 				-- rouilj
> John Rouillard
> ===========================================================================
> My employers don't acknowledge my existence much less my opinions.
>
> ------------------------------------------------------------------------------
> Check out the vibrant tech community on one of the world's most
> engaging tech sites, Slashdot.org! http://sdm.link/slashdot
> _______________________________________________
> Roundup-users mailing list
> [email protected]
> https://lists.sourceforge.net/lists/listinfo/roundup-users
>


------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.