A plugin for Strapi CMS that protects certain entries from being deleted.
npm install strapi-plugin-do-not-delete
A plugin for Strapi CMS that protects certain entries from being deleted.

* Features
* Installation
* Configuration
* User Guide
* Troubleshooting
* Migration
* Support or Donate
* Roadmap
bash
yarn add strapi-plugin-do-not-delete@latest
`Don't forget to restart or rebuild your Strapi app when installing a new plugin.
π§ Configuration
Configuration can be added to the pluginOptions of a schema. This will need to apply to each individual content type that utilizes this plugin.`js
// ./api/page/content-types/page/schema.json
{
"kind": "collectionType",
"collectionName": "pages",
"info": {
"singularName": "page",
"pluralName": "pages",
"displayName": "Page",
"description": "Generic web page"
},
"options": {
"draftAndPublish": true
},
"pluginOptions": {
"do-not-delete": {
// Config goes here.
}
},
"attributes": {
"title": {
"type": "string",
"required": true
},
"slug": {
"type": "uid",
"targetField": "title",
"required": true
}
}
}
`| property | type | description |
| - | - | - |
| rules | array | An array of protection rules. |
$3
An array of protection rules.#### Example
Below, the comparison rule is querying if the
slug value for Page is equal to home, and if this condition is true, the delete operation is cancelled.`js
// ./api/page/content-types/page/schema.json
"pluginOptions": {
"do-not-delete": {
"rules": [
["slug", "is", "home"]
]
}
}
`#### Comparators
The items in each comparison array must follow the format:
`ts
['attribute', 'comparator', 'value or pattern']
`| Comparator | Description |
| -- | -- |
|
is | Strict equality with === |
| isNot | Strict inequality with !== |
| in | Does the value array include attribute? |
| notIn | Does the value array not include attribute? |
| has | Does the attribute contain value? |
| hasNot | Does the attribute not contain value? |
| lt | Is attribute less than value? |
| lte | Is attribute less than or equal to value? |
| gt | Is attribute greater than value? |
| gte | Is attribute greater than or equal to value? |
| between | Does attribute fall between the pair of values? |
| after | Does attribute occur after the value date? |
| before | Does attribute occur before the value date? |
| day | Does attribute occur on the same day of the value date? |
| month | Does attribute occur in the same month of the value date? |
| year | Does attribute occur in the same year of the value date? |
| matches | RegExp test against pattern (do not include outer slashes) |`js
// ./api/page/content-types/page/schema.json
"pluginOptions": {
"do-not-delete": {
"rules": [
// Equality.
["slug", "is", "home"],
["slug", "isNot", "test"], // Contains.
["slug", "in", ["home", "blog", "404"]],
["slug", "notIn", ["test", "temp"]],
["slug", "has", "admin"],
["slug", "hasNot", "-test"],
// Regular expression.
["slug", "matches", "^foobar"], // same as "starts with"
["slug", "matches", "foobar$"], // same as "ends with"
// Greater than or equal to.
["rating", "lt", 10],
["rating", "lte", 9],
["rating", "gt", 4],
["rating", "gte", 5],
["rating", "between", [3, 6]],
// Dates (any valid date string format can be used).
["publishedAt", "after", "2022-12-31"],
["publishedAt", "before", "2020-01-01T00:00:00.000Z"],
["publishedAt", "day", "Wed, 01 Jan 2020 00:00:00 GMT"],
["publishedAt", "month", "January 2020"],
["publishedAt", "year", "2023"],
]
}
}
`π User Guide
$3
When attempting to delete a protected entry, a validation error will display at the top of the screen that reads:> This entry is protected and cannot be deleted.
$3
If you find yourself in a scenario where a protected entry actually does need to be deleted, you must first update the pluginOptions and restart Strapi to remove the protection rule that applies to that entry.π© Troubleshooting
#### In general
Remember to rebuild your app after making changes to some config or other code.
`bash
yarn build
OR
yarn develop
``