diff --git a/packages/strapi-generate-new/lib/after.js b/packages/strapi-generate-new/lib/after.js
index fd67d70c13..ac39ac30a1 100755
--- a/packages/strapi-generate-new/lib/after.js
+++ b/packages/strapi-generate-new/lib/after.js
@@ -83,7 +83,7 @@ module.exports = (scope, cb) => {
// Install default plugins and link dependencies.
function pluginsInstallation() {
// Define the list of default plugins.
- const defaultPlugins = ['settings-manager', 'content-type-builder', 'content-manager'];
+ const defaultPlugins = ['settings-manager', 'content-type-builder', 'content-manager', 'users-permissions'];
// Install each plugin.
defaultPlugins.forEach(defaultPlugin => {
diff --git a/packages/strapi-helper-plugin/package.json b/packages/strapi-helper-plugin/package.json
index ec1a6d6a78..7a5c07b5d8 100755
--- a/packages/strapi-helper-plugin/package.json
+++ b/packages/strapi-helper-plugin/package.json
@@ -115,4 +115,4 @@
"webpack-hot-middleware": "^2.18.2",
"whatwg-fetch": "^2.0.3"
}
-}
\ No newline at end of file
+}
diff --git a/packages/strapi-plugin-users-permissions/.editorconfig b/packages/strapi-plugin-users-permissions/.editorconfig
new file mode 100755
index 0000000000..d4eed8406b
--- /dev/null
+++ b/packages/strapi-plugin-users-permissions/.editorconfig
@@ -0,0 +1,7 @@
+root = true
+
+[*]
+end_of_line = lf
+insert_final_newline = false
+indent_style = space
+indent_size = 2
diff --git a/packages/strapi-plugin-users-permissions/.gitattributes b/packages/strapi-plugin-users-permissions/.gitattributes
new file mode 100755
index 0000000000..065a11c71d
--- /dev/null
+++ b/packages/strapi-plugin-users-permissions/.gitattributes
@@ -0,0 +1,103 @@
+# From https://github.com/Danimoth/gitattributes/blob/master/Web.gitattributes
+
+# Handle line endings automatically for files detected as text
+# and leave all files detected as binary untouched.
+* text=auto
+
+#
+# The above will handle all files NOT found below
+#
+
+#
+## These files are text and should be normalized (Convert crlf => lf)
+#
+
+# source code
+*.php text
+*.css text
+*.sass text
+*.scss text
+*.less text
+*.styl text
+*.js text eol=lf
+*.coffee text
+*.json text
+*.htm text
+*.html text
+*.xml text
+*.svg text
+*.txt text
+*.ini text
+*.inc text
+*.pl text
+*.rb text
+*.py text
+*.scm text
+*.sql text
+*.sh text
+*.bat text
+
+# templates
+*.ejs text
+*.hbt text
+*.jade text
+*.haml text
+*.hbs text
+*.dot text
+*.tmpl text
+*.phtml text
+
+# git config
+.gitattributes text
+.gitignore text
+.gitconfig text
+
+# code analysis config
+.jshintrc text
+.jscsrc text
+.jshintignore text
+.csslintrc text
+
+# misc config
+*.yaml text
+*.yml text
+.editorconfig text
+
+# build config
+*.npmignore text
+*.bowerrc text
+
+# Heroku
+Procfile text
+.slugignore text
+
+# Documentation
+*.md text
+LICENSE text
+AUTHORS text
+
+
+#
+## These files are binary and should be left untouched
+#
+
+# (binary is a macro for -text -diff)
+*.png binary
+*.jpg binary
+*.jpeg binary
+*.gif binary
+*.ico binary
+*.mov binary
+*.mp4 binary
+*.mp3 binary
+*.flv binary
+*.fla binary
+*.swf binary
+*.gz binary
+*.zip binary
+*.7z binary
+*.ttf binary
+*.eot binary
+*.woff binary
+*.pyc binary
+*.pdf binary
diff --git a/packages/strapi-plugin-users-permissions/.gitignore b/packages/strapi-plugin-users-permissions/.gitignore
new file mode 100755
index 0000000000..5d06c054ed
--- /dev/null
+++ b/packages/strapi-plugin-users-permissions/.gitignore
@@ -0,0 +1,10 @@
+# Don't check auto-generated stuff into git
+coverage
+build
+node_modules
+stats.json
+
+# Cruft
+.DS_Store
+npm-debug.log
+.idea
diff --git a/packages/strapi-plugin-users-permissions/README.md b/packages/strapi-plugin-users-permissions/README.md
new file mode 100755
index 0000000000..6f2fd987e1
--- /dev/null
+++ b/packages/strapi-plugin-users-permissions/README.md
@@ -0,0 +1 @@
+# Strapi plugin
\ No newline at end of file
diff --git a/packages/strapi-plugin-users-permissions/admin/src/components/Button/index.js b/packages/strapi-plugin-users-permissions/admin/src/components/Button/index.js
new file mode 100755
index 0000000000..7388afdae2
--- /dev/null
+++ b/packages/strapi-plugin-users-permissions/admin/src/components/Button/index.js
@@ -0,0 +1,27 @@
+/**
+ *
+ * Button
+ *
+ */
+
+import React from 'react';
+import PropTypes from 'prop-types';
+
+import styles from './styles.scss';
+
+class Button extends React.Component {
+ // eslint-disable-line react/prefer-stateless-function
+ render() {
+ return (
+
+ );
+ }
+}
+
+Button.propTypes = {
+ label: PropTypes.string.isRequired,
+};
+
+export default Button;
diff --git a/packages/strapi-plugin-users-permissions/admin/src/components/Button/styles.scss b/packages/strapi-plugin-users-permissions/admin/src/components/Button/styles.scss
new file mode 100755
index 0000000000..db859bffea
--- /dev/null
+++ b/packages/strapi-plugin-users-permissions/admin/src/components/Button/styles.scss
@@ -0,0 +1,3 @@
+.button {
+
+}
diff --git a/packages/strapi-plugin-users-permissions/admin/src/containers/App/actions.js b/packages/strapi-plugin-users-permissions/admin/src/containers/App/actions.js
new file mode 100755
index 0000000000..a5002ad023
--- /dev/null
+++ b/packages/strapi-plugin-users-permissions/admin/src/containers/App/actions.js
@@ -0,0 +1,5 @@
+/*
+ *
+ * App actions
+ *
+ */
diff --git a/packages/strapi-plugin-users-permissions/admin/src/containers/App/constants.js b/packages/strapi-plugin-users-permissions/admin/src/containers/App/constants.js
new file mode 100755
index 0000000000..f62c609507
--- /dev/null
+++ b/packages/strapi-plugin-users-permissions/admin/src/containers/App/constants.js
@@ -0,0 +1,5 @@
+/*
+ *
+ * App constants
+ *
+ */
diff --git a/packages/strapi-plugin-users-permissions/admin/src/containers/App/index.js b/packages/strapi-plugin-users-permissions/admin/src/containers/App/index.js
new file mode 100755
index 0000000000..ce6e346282
--- /dev/null
+++ b/packages/strapi-plugin-users-permissions/admin/src/containers/App/index.js
@@ -0,0 +1,59 @@
+/**
+ *
+ * This component is the skeleton around the actual pages, and should only
+ * contain code that should be seen on all pages. (e.g. navigation bar)
+ *
+ */
+
+import React from 'react';
+import PropTypes from 'prop-types';
+import { connect } from 'react-redux';
+import { createStructuredSelector } from 'reselect';
+import { Switch, Route } from 'react-router-dom';
+import { bindActionCreators, compose } from 'redux';
+
+// Utils
+import { pluginId } from 'app';
+
+// Containers
+import HomePage from 'containers/HomePage';
+import NotFoundPage from 'containers/NotFoundPage';
+
+class App extends React.Component {
+ render() {
+ return (
+
+
+
+
+
+
+ );
+ }
+}
+
+App.contextTypes = {
+ plugins: PropTypes.object,
+ router: PropTypes.object.isRequired,
+ updatePlugin: PropTypes.func,
+};
+
+App.propTypes = {
+ history: PropTypes.object.isRequired,
+};
+
+export function mapDispatchToProps(dispatch) {
+ return bindActionCreators(
+ {},
+ dispatch,
+ );
+}
+
+const mapStateToProps = createStructuredSelector({});
+
+// Wrap the component to inject dispatch and state into it
+const withConnect = connect(mapStateToProps, mapDispatchToProps);
+
+export default compose(
+ withConnect,
+)(App);
diff --git a/packages/strapi-plugin-users-permissions/admin/src/containers/App/reducer.js b/packages/strapi-plugin-users-permissions/admin/src/containers/App/reducer.js
new file mode 100755
index 0000000000..38026c39cd
--- /dev/null
+++ b/packages/strapi-plugin-users-permissions/admin/src/containers/App/reducer.js
@@ -0,0 +1,18 @@
+/*
+ *
+ * App reducer
+ *
+ */
+
+import { fromJS } from 'immutable';
+
+const initialState = fromJS({});
+
+function appReducer(state = initialState, action) {
+ switch (action.type) {
+ default:
+ return state;
+ }
+}
+
+export default appReducer;
diff --git a/packages/strapi-plugin-users-permissions/admin/src/containers/App/selectors.js b/packages/strapi-plugin-users-permissions/admin/src/containers/App/selectors.js
new file mode 100755
index 0000000000..2393a073cd
--- /dev/null
+++ b/packages/strapi-plugin-users-permissions/admin/src/containers/App/selectors.js
@@ -0,0 +1,9 @@
+// import { createSelector } from 'reselect';
+
+/**
+ * Direct selector to the list state domain
+ */
+
+// const selectGlobalDomain = () => state => state.get('global');
+
+export {};
diff --git a/packages/strapi-plugin-users-permissions/admin/src/containers/HomePage/actions.js b/packages/strapi-plugin-users-permissions/admin/src/containers/HomePage/actions.js
new file mode 100755
index 0000000000..233d030606
--- /dev/null
+++ b/packages/strapi-plugin-users-permissions/admin/src/containers/HomePage/actions.js
@@ -0,0 +1,13 @@
+/*
+ *
+ * HomePage actions
+ *
+ */
+
+import { DEFAULT_ACTION } from './constants';
+
+export function defaultAction() {
+ return {
+ type: DEFAULT_ACTION,
+ };
+}
diff --git a/packages/strapi-plugin-users-permissions/admin/src/containers/HomePage/constants.js b/packages/strapi-plugin-users-permissions/admin/src/containers/HomePage/constants.js
new file mode 100755
index 0000000000..3686db5138
--- /dev/null
+++ b/packages/strapi-plugin-users-permissions/admin/src/containers/HomePage/constants.js
@@ -0,0 +1,7 @@
+/*
+ *
+ * HomePage constants
+ *
+ */
+
+export const DEFAULT_ACTION = 'HomePage/DEFAULT_ACTION';
diff --git a/packages/strapi-plugin-users-permissions/admin/src/containers/HomePage/index.js b/packages/strapi-plugin-users-permissions/admin/src/containers/HomePage/index.js
new file mode 100755
index 0000000000..e55bfef860
--- /dev/null
+++ b/packages/strapi-plugin-users-permissions/admin/src/containers/HomePage/index.js
@@ -0,0 +1,65 @@
+/*
+ *
+ * HomePage
+ *
+ */
+
+import React from 'react';
+import PropTypes from 'prop-types';
+import { connect } from 'react-redux';
+import { createStructuredSelector } from 'reselect';
+import { injectIntl } from 'react-intl';
+import { bindActionCreators, compose } from 'redux';
+
+import injectReducer from 'utils/injectReducer';
+import injectSaga from 'utils/injectSaga';
+
+// Selectors
+import selectHomePage from './selectors';
+
+// Styles
+import styles from './styles.scss';
+
+import reducer from './reducer';
+import saga from './saga';
+
+export class HomePage extends React.Component {
+ render() {
+ return (
+
+
+ );
+ }
+}
+
+HomePage.contextTypes = {
+ router: PropTypes.object,
+};
+
+HomePage.propTypes = {
+ // homePage: PropTypes.object,
+};
+
+function mapDispatchToProps(dispatch) {
+ return bindActionCreators(
+ {
+ // Your actions here
+ },
+ dispatch,
+ );
+}
+
+const mapStateToProps = createStructuredSelector({
+ homePage: selectHomePage(),
+});
+
+const withConnect = connect(mapStateToProps, mapDispatchToProps);
+
+const withReducer = injectReducer({ key: 'homePage', reducer });
+const withSaga = injectSaga({ key: 'homePage', saga });
+
+export default compose(
+ withReducer,
+ withSaga,
+ withConnect,
+)(injectIntl(HomePage));
diff --git a/packages/strapi-plugin-users-permissions/admin/src/containers/HomePage/reducer.js b/packages/strapi-plugin-users-permissions/admin/src/containers/HomePage/reducer.js
new file mode 100755
index 0000000000..554a71e0e4
--- /dev/null
+++ b/packages/strapi-plugin-users-permissions/admin/src/containers/HomePage/reducer.js
@@ -0,0 +1,22 @@
+/*
+ *
+ * HomePage reducer
+ *
+ */
+
+import { fromJS } from 'immutable';
+
+import { DEFAULT_ACTION } from './constants';
+
+const initialState = fromJS({});
+
+function homePageReducer(state = initialState, action) {
+ switch (action.type) {
+ case DEFAULT_ACTION:
+ return state;
+ default:
+ return state;
+ }
+}
+
+export default homePageReducer;
diff --git a/packages/strapi-plugin-users-permissions/admin/src/containers/HomePage/saga.js b/packages/strapi-plugin-users-permissions/admin/src/containers/HomePage/saga.js
new file mode 100755
index 0000000000..b7e6203def
--- /dev/null
+++ b/packages/strapi-plugin-users-permissions/admin/src/containers/HomePage/saga.js
@@ -0,0 +1,9 @@
+// import { LOCATION_CHANGE } from 'react-router-redux';
+// import { takeLatest, put, fork, take, cancel } from 'redux-saga/effects';
+
+// Individual exports for testing
+export function* defaultSaga() {
+}
+
+// All sagas to be loaded
+export default defaultSaga;
diff --git a/packages/strapi-plugin-users-permissions/admin/src/containers/HomePage/selectors.js b/packages/strapi-plugin-users-permissions/admin/src/containers/HomePage/selectors.js
new file mode 100755
index 0000000000..cf3f854ff7
--- /dev/null
+++ b/packages/strapi-plugin-users-permissions/admin/src/containers/HomePage/selectors.js
@@ -0,0 +1,17 @@
+import { createSelector } from 'reselect';
+
+/**
+ * Direct selector to the homePage state domain
+ */
+const selectHomePageDomain = () => state => state.get('homePage');
+
+/**
+ * Default selector used by HomePage
+ */
+
+const selectHomePage = () => createSelector(
+ selectHomePageDomain(),
+ (substate) => substate.toJS(),
+);
+
+export default selectHomePage;
diff --git a/packages/strapi-plugin-users-permissions/admin/src/containers/HomePage/styles.scss b/packages/strapi-plugin-users-permissions/admin/src/containers/HomePage/styles.scss
new file mode 100755
index 0000000000..abd13152b4
--- /dev/null
+++ b/packages/strapi-plugin-users-permissions/admin/src/containers/HomePage/styles.scss
@@ -0,0 +1,3 @@
+.homePage {
+
+}
diff --git a/packages/strapi-plugin-users-permissions/admin/src/containers/NotFoundPage/index.js b/packages/strapi-plugin-users-permissions/admin/src/containers/NotFoundPage/index.js
new file mode 100755
index 0000000000..8ca6fd2190
--- /dev/null
+++ b/packages/strapi-plugin-users-permissions/admin/src/containers/NotFoundPage/index.js
@@ -0,0 +1,20 @@
+/**
+ * NotFoundPage
+ *
+ * This is the page we show when the user visits a url that doesn't have a route
+ *
+ * NOTE: while this component should technically be a stateless functional
+ * component (SFC), hot reloading does not currently support SFCs. If hot
+ * reloading is not a neccessity for you then you can refactor it and remove
+ * the linting exception.
+ */
+
+import React from 'react';
+
+import NotFound from 'components/NotFound';
+
+export default class NotFoundPage extends React.Component {
+ render() {
+ return ;
+ }
+}
diff --git a/packages/strapi-plugin-users-permissions/admin/src/translations/en.json b/packages/strapi-plugin-users-permissions/admin/src/translations/en.json
new file mode 100755
index 0000000000..50c563b3fd
--- /dev/null
+++ b/packages/strapi-plugin-users-permissions/admin/src/translations/en.json
@@ -0,0 +1,3 @@
+{
+ "plugin.description": "Protect your API with a full-authentication process"
+}
diff --git a/packages/strapi-plugin-users-permissions/admin/src/translations/fr.json b/packages/strapi-plugin-users-permissions/admin/src/translations/fr.json
new file mode 100755
index 0000000000..4d4724f699
--- /dev/null
+++ b/packages/strapi-plugin-users-permissions/admin/src/translations/fr.json
@@ -0,0 +1,3 @@
+{
+ "plugin.description": "Protegez votre API avec un système d'authentification complet"
+}
diff --git a/packages/strapi-plugin-users-permissions/config/routes.json b/packages/strapi-plugin-users-permissions/config/routes.json
new file mode 100644
index 0000000000..4d376a246e
--- /dev/null
+++ b/packages/strapi-plugin-users-permissions/config/routes.json
@@ -0,0 +1,12 @@
+{
+ "routes": [
+ {
+ "method": "GET",
+ "path": "/",
+ "handler": "UsersPermissions.index",
+ "config": {
+ "policies": []
+ }
+ }
+ ]
+}
diff --git a/packages/strapi-plugin-users-permissions/controllers/UsersPermissions.js b/packages/strapi-plugin-users-permissions/controllers/UsersPermissions.js
new file mode 100644
index 0000000000..bd42a32f65
--- /dev/null
+++ b/packages/strapi-plugin-users-permissions/controllers/UsersPermissions.js
@@ -0,0 +1,25 @@
+'use strict';
+
+/**
+ * UsersPermissions.js controller
+ *
+ * @description: A set of functions called "actions" of the `users-permissions` plugin.
+ */
+
+module.exports = {
+
+ /**
+ * Default action.
+ *
+ * @return {Object}
+ */
+
+ index: async (ctx) => {
+ // Add your own logic here.
+
+ // Send 200 `ok`
+ ctx.send({
+ message: 'ok'
+ });
+ }
+};
diff --git a/packages/strapi-plugin-users-permissions/package.json b/packages/strapi-plugin-users-permissions/package.json
new file mode 100644
index 0000000000..1836d375fe
--- /dev/null
+++ b/packages/strapi-plugin-users-permissions/package.json
@@ -0,0 +1,62 @@
+{
+ "name": "strapi-plugin-users-permissions",
+ "version": "0.0.0",
+ "description": "This is the description of the plugin.",
+ "strapi": {
+ "name": "Auth & Permissions",
+ "icon": "users",
+ "description": "users-permissions.plugin.description"
+ },
+ "scripts": {
+ "analyze:clean": "rimraf stats.json",
+ "preanalyze": "npm run analyze:clean",
+ "analyze": "node node_modules/strapi-helper-plugin/lib/internals/scripts/analyze.js",
+ "prebuild": "npm run build:clean && npm run test",
+ "build": "cross-env NODE_ENV=production webpack --config node_modules/strapi-helper-plugin/lib/internals/webpack/webpack.prod.babel.js --color -p --progress",
+ "build:clean": "rimraf admin/build",
+ "start": "cross-env NODE_ENV=development node node_modules/strapi-helper-plugin/lib/server",
+ "generate": "plop --plopfile node_modules/strapi-helper-plugin/lib/internals/generators/index.js",
+ "lint": "eslint --ignore-path .gitignore --config node_modules/strapi-helper-plugin/lib/internals/eslint/.eslintrc.json admin",
+ "pretest": "npm run lint",
+ "prettier": "prettier --single-quote --trailing-comma es5 --write \"{admin,__{tests,mocks}__}/**/*.js\"",
+ "test": "echo Tests are not implemented.",
+ "prepublish": "npm run build",
+ "postinstall": "node node_modules/strapi-helper-plugin/lib/internals/scripts/postinstall.js"
+ },
+ "dependencies": {},
+ "devDependencies": {
+ "cross-env": "^5.1.1",
+ "eslint": "^4.10.0",
+ "eslint-config-airbnb": "^15.1.0",
+ "eslint-config-airbnb-base": "^11.3.2",
+ "eslint-config-prettier": "^2.7.0",
+ "eslint-import-resolver-webpack": "^0.8.3",
+ "eslint-plugin-babel": "^4.1.2",
+ "eslint-plugin-import": "^2.8.0",
+ "eslint-plugin-jsx-a11y": "^6.0.2",
+ "eslint-plugin-react": "^7.4.0",
+ "eslint-plugin-redux-saga": "^0.4.0",
+ "plop": "^1.9.0",
+ "prettier": "^1.7.4",
+ "rimraf": "^2.6.2",
+ "strapi-helper-plugin": "3.0.0-alpha.6.4",
+ "webpack": "^3.8.1"
+ },
+ "author": {
+ "name": "A Strapi developer",
+ "email": "",
+ "url": ""
+ },
+ "maintainers": [
+ {
+ "name": "A Strapi developer",
+ "email": "",
+ "url": ""
+ }
+ ],
+ "engines": {
+ "node": ">= 7.0.0",
+ "npm": ">= 3.0.0"
+ },
+ "license": "MIT"
+}
diff --git a/packages/strapi-plugin-users-permissions/services/UsersPermissions.js b/packages/strapi-plugin-users-permissions/services/UsersPermissions.js
new file mode 100644
index 0000000000..9162354fba
--- /dev/null
+++ b/packages/strapi-plugin-users-permissions/services/UsersPermissions.js
@@ -0,0 +1,11 @@
+'use strict';
+
+/**
+ * UsersPermissions.js service
+ *
+ * @description: A set of functions similar to controller's actions to avoid code duplication.
+ */
+
+module.exports = {
+
+};