kotti.security

kotti.security.has_permission(permission: str, context: Node, request: Request) → pyramid.security.PermitsResult[source]

Default permission checker

class kotti.security.Principal(name, password=None, active=True, confirm_token=None, title='', email=None, groups=None)[source]

A minimal ‘Principal’ implementation.

The attributes on this object correspond to what one ought to implement to get full support by the system. You’re free to add additional attributes.

  • As convenience, when passing ‘password’ in the initializer, it is hashed using ‘get_principals().hash_password’
  • The boolean ‘active’ attribute defines whether a principal may log in. This allows the deactivation of accounts without deleting them.
  • The ‘confirm_token’ attribute is set whenever a user has forgotten their password. This token is used to identify the receiver of the email. This attribute should be set to ‘None’ once confirmation has succeeded.
class kotti.security.AbstractPrincipals[source]

This class serves as documentation and defines what methods are expected from a Principals database.

Principals mostly provides dict-like access to the principal objects in the database. In addition, there’s the ‘search’ method which allows searching users and groups.

‘hash_password’ is for initial hashing of a clear text password, while ‘validate_password’ is used by the login to see if the entered password matches the hashed password that’s already in the database.

Use the ‘kotti.principals’ settings variable to override Kotti’s default Principals implementation with your own.

keys() → List[str][source]

Return a list of principal ids that are in the database.

search(**kwargs) → List[kotti.security.Principal][source]

Return an iterable with principal objects that correspond to the search arguments passed in.

This example would return all principals with the id ‘bob’:

get_principals().search(name=’bob’)

Here, we ask for all principals that have ‘bob’ in either their ‘name’ or their ‘title’. We pass ‘bob’ instead of ‘bob’ to indicate that we want case-insensitive substring matching:

get_principals().search(name=’bob’, title=’bob’)

This call should fail with AttributeError unless there’s a ‘foo’ attribute on principal objects that supports search:

get_principals().search(name=’bob’, foo=’bar’)
hash_password(password: str) → str[source]

Return a hash of the given password.

This is what’s stored in the database as ‘principal.password’.

validate_password(clear: str, hashed: str) → bool[source]

Returns True if the clear text password matches the hash.

kotti.security.list_groups(name: str, context: Optional[Node] = None) → List[str][source]

List groups for principal with a given name.

The optional context argument may be passed to check the list of groups in a given context.

kotti.security.set_groups(name: str, context: Node, groups_to_set: Iterable[str] = ()) → None[source]

Set the list of groups for principal with given name and in given context.

kotti.security.list_groups_callback(name: str, request: Request) → Optional[List[str]][source]

List the groups for the principal identified by name. Consider authz_context to support assignment of local roles to groups.

kotti.security.principals_with_local_roles(context: Node, inherit: Optional[bool] = True) → List[str][source]

Return a list of principal names that have local roles in the context.

class kotti.security.Principals[source]

Kotti’s default principal database.

Look at ‘AbstractPrincipals’ for documentation.

This is a default implementation that may be replaced by using the ‘kotti.principals’ settings variable.

factory

alias of Principal

keys() → a set-like object providing a view on D's keys[source]
search(match: Optional[str] = 'any', **kwargs) → sqlalchemy.orm.query.Query[source]

Search the principal database.

Parameters:
  • match (str) – any to return all principals matching any search param, all to return only principals matching all params
  • kwargs (varying.) – Search conditions, e.g. name='bob', active=True.
Result:

SQLAlchemy query object

Return type:

sqlalchemy.orm.query.Query`