def check_able(self, ability, model, request):
p = self.plugin_for(model)<EOL>if not hasattr(p, '<STR_LIT>' % ability):<EOL><INDENT>p = self.get_default_plugin()<EOL><DEDENT>if not hasattr(p, '<STR_LIT>' % ability):<EOL><INDENT>logger.debug("<STR_LIT>", ability, model)<EOL>return {}<EOL><DEDENT>logger.debug("<STR_LIT>", ability, model)<EOL>m = getattr(p, '<STR_LIT>' % ability)<EOL>return m(model, request)<EOL>
The check_able(ability, model, request) applies the ability
to the model for the user requesting the request.

This call is passed to the resolved or default plugin if the plugin is
found and the method named check_<ability> is found in the plugin, and returns
a value returned by the found plugin method.

A False (or equal) value assumed to be returned by the plugin if the user is not able
to use this model in requested manner. Any other value (including None) will be returned
to the caller and allows requested operation for the model.

Standard `visible`, `changeable`, and `deleteable` abilities are requested
by the admin.

Checking the `appendable` ability returns a dictionary
of default field values for the model when the user is requesting the instance creation.

The default values are slightly different for simple and complex fields.

If the default value is not iterable or is a string, it just assigns to the field
if the field is empty yet.

If the default value is iterable, the field assumed to be a RelatedManager
having an `add` method. Iterated values then are passed to the `add` method.