I see from the documentation it is possible to add a permission to
auth_permission with a blank table name. The application I am working
on has a notion of symbolic names for actions that can occur in the
application which in a prior version was assigned to groups (roles)
and then users were assigned to groups. There is no crud associated
with a table.

If I turn off the

    table.table_name.requires = IS_IN_SET(self.db.tables)

validator then I can get a form to put in a blank table name. If I
also set the record_id to 0 during the insert then the decorator

@auth.requires_permission('symbolic_name')

works without specifying a table name or record_id because of default
parameters.

If I put in a table name during the insert then the table name must be
supplied on the auth.requires_permission decorator.

The manual has examples like this
@auth.requires_permission('add', 'number')
def add(a, b):
    return a + b

where I am reasonably sure 'number' isn't a table.

Question:
Am I using this incorrectly? The reason I want the symbolic names for
capabilities in the application to be realised as permissions is I can
cluster them on a group but reconfigure them for a different situation
to a different mix of groups and then knowing that mapping give the
users membership in the proper group(s) so they have access to the
application functionality intended for them. Then I can use the nice
decorator capability on the controller functions.

Possible solutions
I could just use an existing table or create a dummy table so I can
slip this by the validators while in forms. But then the decorator has
the extra table name parameter which isn't really used for anything.

I could put my own logic in the forms for the permission creation or
stick the initial setup in a script and fly under the validators but
invariably someone will want a form to change things after the
programmer is gone.

I could add my own table for symbolic capabilities with a relation to
auth_group and reproduce the decorator functionality.

Thanks
Ron

Reply via email to