The CLI can be used to generate files in the plugins folders.
Please refer to the [CLI documentation](../cli/CLI.md) for more informations.
## Controllers
Controllers contain functions executed according to the requested route.
Please refer to the [Controllers documentation](../guides/controllers.md) for more informations.
## Models
A plugin can have its own models.
### Table/Collection naming
Sometimes it happens that the plugins inject models that have the same name as yours. Let's take a quick example.
You already have `User` model defining in your `./api/user/models/User.settings.json` API. And you decide to install the `Users & Permissions` plugin. This plugin also contains a `User` model. To avoid the conflicts, the plugins' models are not globally exposed which means you cannot access to the plugin's model like this:
Also, the table/collection name won't be `users` because you already have a `User` model. That's why, the framework will automatically prefix the table/collection name for this model with the name of the plugin. Which means in our example, the table/collection name of the `User` model of our plugin `Users & Permissions` will be `users-permissions_users`. If you want to force the table/collection name of the plugin's model, you can add the `collectionName` attribute in your model.
Please refer to the [Models documentation](../guides/models.md) for more informations.
## Policies
### Global policies
A plugin can also use a globally exposed policy in the current Strapi project.
A plugin can have its own policies, such as adding security rules. For instance, if the plugin includes a policy named `isAuthenticated`, the syntax to use this policy would be:
Strapi supports multiple ORMs in order to let the users choose the database management system that suits their needs. Hence, each plugin must be compatible with at least one ORM. Each plugin contains a folder named `queries` in `./plugins/**/api/queries`. A file must be created for each ORM (eg. `mongoose.js` which exports the Mongoose ORM related queries).
The queries of a plugin are accessible through the `strapi.plugins.['pluginName'].queries('modelName', 'pluginName')` method, which automatically contains the queries according to the ORM used by the model.
We use it for example in the [Content Manager plugin](https://github.com/strapi/strapi/tree/master/packages/strapi-plugin-content-manager/config/queries).