Skip to content

Commit

Permalink
enhancement: invert user role
Browse files Browse the repository at this point in the history
  • Loading branch information
nicolaslabbe committed Nov 24, 2016
1 parent 059ae3d commit fc65b3b
Show file tree
Hide file tree
Showing 18 changed files with 39 additions and 49 deletions.
6 changes: 3 additions & 3 deletions src/cli/cms/editor/handlebars/listPage.js
Expand Up @@ -14,7 +14,7 @@ export default function listPage(file, index, text) {
res += '<tr>'
res += `<td>${math(index, '+', 1)}</td>
<td>
<a href="/abe${file.abe_meta.link}" class="file-path">
<a href="/abe/editor${file.abe_meta.link}" class="file-path">
${file.abe_meta.link}
</a>
</td>`
Expand Down Expand Up @@ -50,9 +50,9 @@ export default function listPage(file, index, text) {
workflow += `<td align="center" class="${flow}">`
if(file[flow]) {
if (flow === 'publish') {
workflow += `<a href="/abe${file[flow].html}" class="checkmark label-published" title="${file[flow].cleanDate}">&#10004;</a>`
workflow += `<a href="/abe/editor${file[flow].html}" class="checkmark label-published" title="${file[flow].cleanDate}">&#10004;</a>`
}else {
workflow += `<a href="/abe${file[flow].html}" class="${hidden} label label-default label-draft" title="${file[flow].cleanDate}">${flow}</a>`
workflow += `<a href="/abe/editor${file[flow].html}" class="${hidden} label label-default label-draft" title="${file[flow].cleanDate}">${flow}</a>`
}
}else {

Expand Down
14 changes: 1 addition & 13 deletions src/cli/cms/templates/handlebars/isAuthorized.js
Expand Up @@ -7,19 +7,7 @@ import {
* Handlebars helper, to print className and escape it string
*/
export default function isAuthorized(route, role, ctx) {
var isAuthorized = true

if (config.users.enable) {
var allowedRoutes = User.utils.getUserRoutes(role)
Array.prototype.forEach.call(allowedRoutes, (allowedRoute) => {
var reg = new RegExp(allowedRoute)
if (reg.test(route)) {
isAuthorized = false
}
})
}

if (isAuthorized) {
if (User.utils.isUserAllowedOnRoute(role, route)) {
return ctx.fn(this)
}else {
return ctx.inverse(this)
Expand Down
18 changes: 10 additions & 8 deletions src/cli/users/utils.js
Expand Up @@ -190,21 +190,23 @@ export function getTokenFromCookies(req, res) {
return cookies.get('x-access-token')
}

export function isUserAllowedOnRoute(user, currentRoute) {
var isAllowed = true
export function isUserAllowedOnRoute(workflow, currentRoute) {
var isAllowed = false

if (user != null) {
if (currentRoute.indexOf('abe/') === -1) {
isAllowed = true
}

if (workflow != null) {
var routes = config.users.routes
if(typeof routes[user.role.workflow] !== 'undefined' && routes[user.role.workflow] !== null) {
Array.prototype.forEach.call(routes[user.role.workflow], (route) => {
if(typeof routes[workflow] !== 'undefined' && routes[workflow] !== null) {
Array.prototype.forEach.call(routes[workflow], (route) => {
var reg = new RegExp(route)
if(reg.test(currentRoute)) {
isAllowed = false
isAllowed = true
}
})
}
}else {
isAllowed = false
}

return isAllowed
Expand Down
4 changes: 2 additions & 2 deletions src/server/app.js
Expand Up @@ -42,7 +42,7 @@ import {
middleWebsite,
middleLogin,
middleCheckCsrf,
middleIsAllowed
middleIsAuthorized
} from './middlewares'

var abePort = null
Expand Down Expand Up @@ -150,7 +150,7 @@ app.set('view engine', '.html')

app.locals.layout = false

app.use(middleIsAllowed)
app.use(middleIsAuthorized)
app.use(middleLogin)
app.use(middleWebsite)
app.use(middleCheckCsrf)
Expand Down
5 changes: 2 additions & 3 deletions src/server/controllers/index.js
Expand Up @@ -9,9 +9,7 @@ import {
,getMain
,getPage
,postPage
// ,postPublish
,getGeneratePost
// ,postDraft
,operations
,getSaveConfig
,getUnpublish
Expand Down Expand Up @@ -61,6 +59,8 @@ router.get('/abe/delete*', getDelete)
router.get('/abe/reference/*', getReference)
router.post('/abe/upload/*', postUpload)
router.post('/abe/reference/*', postReference)
router.get('/abe/editor*', getMain)

router.get('/abe/list-url*', function (req, res, next) {
getListUrl(router, req, res, next)
})
Expand Down Expand Up @@ -110,7 +110,6 @@ Array.prototype.forEach.call(routes, (route) => {
})
}
})
router.get('/abe*', getMain)
// router.get('/abe*', getMain)

abeExtend.hooks.instance.trigger('afterAddRoute', router)
Expand Down
4 changes: 2 additions & 2 deletions src/server/middlewares/index.js
@@ -1,11 +1,11 @@
import middleWebsite from './website'
import middleLogin from './login'
import middleCheckCsrf from './checkCsrf'
import middleIsAllowed from './isUserAllowed'
import middleIsAuthorized from './isAuthorized'

export {
middleWebsite,
middleLogin,
middleCheckCsrf,
middleIsAllowed
middleIsAuthorized
}
Expand Up @@ -24,7 +24,7 @@ var middleware = function(req, res, next) {
var decoded = User.utils.decodeUser(req, res)
var user = User.utils.findSync(decoded.iss)

if (User.utils.isUserAllowedOnRoute(user, req.url)) {
if (user != null && User.utils.isUserAllowedOnRoute(user.role.workflow, req.url)) {
res.user = user
next()
}else {
Expand Down
4 changes: 2 additions & 2 deletions src/server/middlewares/website.js
Expand Up @@ -8,7 +8,7 @@ import {
} from '../../cli'

var middleware = function(req, res, next) {
if (req.originalUrl.indexOf('/abe/') > -1 || req.originalUrl.indexOf('/plugin/') > -1) {
if (req.originalUrl.indexOf('/abe/') > -1) {
return next()
}

Expand All @@ -25,7 +25,7 @@ var middleware = function(req, res, next) {
var files = coreUtils.file.getFilesSync(pathWebsite, false)
var folders = coreUtils.file.getFoldersSync(pathWebsite, false)
var html = '<ul>'
html += '<li><a href="/abe/">abe</abe></li>'
html += '<li><a href="/abe/editor">abe</abe></li>'
html += '<br />'
if (req.originalUrl !== '/' && req.originalUrl !== '') {
var parent = req.originalUrl.replace(/\/$/, '').split('/')
Expand Down
2 changes: 1 addition & 1 deletion src/server/public/scripts/modules/FormCreate.js
Expand Up @@ -230,7 +230,7 @@ export default class FormCreate {
this._isSaving = false
var jsonRes = JSON.parse(responseText)
if (jsonRes.success == 1 && jsonRes.json != null && jsonRes.json.abe_meta != null) {
window.location.href = window.location.origin + '/abe' + jsonRes.json.abe_meta.link
window.location.href = window.location.origin + '/abe/editor' + jsonRes.json.abe_meta.link
}else {
alert('error')
}
Expand Down
6 changes: 3 additions & 3 deletions src/server/routes/get-main.js
Expand Up @@ -74,7 +74,7 @@ function renderAbeAdmin(EditorVariables, obj, filePath) {
}

var route = function(req, res, next) {
var filePath = req.originalUrl.replace('/abe', '')
var filePath = req.originalUrl.replace('/abe/editor', '')
if (filePath === '' || filePath === '/') {
filePath = null
}
Expand Down Expand Up @@ -108,7 +108,7 @@ var route = function(req, res, next) {
},
filename: fileName,
folderPath: folderPath,
abeUrl: '/abe/',
abeUrl: '/abe/editor/',
isHome: isHome,
config: config,
Locales: coreUtils.locales.instance.i18n,
Expand All @@ -130,7 +130,7 @@ var route = function(req, res, next) {
}

if(jsonPath === null || !coreUtils.file.exist(jsonPath)) {
res.redirect('/abe/')
res.redirect('/abe/editor')
return
}

Expand Down
2 changes: 1 addition & 1 deletion src/server/routes/users/post/login.js
Expand Up @@ -63,7 +63,7 @@ var route = function(req, res, next) {
})
cookies.set( 'x-access-token', token )

res.redirect('/abe/')
res.redirect('/abe/editor/')
})(req, res, next)
}

Expand Down
2 changes: 1 addition & 1 deletion src/server/views/list-hooks.html
Expand Up @@ -11,7 +11,7 @@

<div class="user-list row col-xs-offset-1 col-xs-10">
<ol class="breadcrumb">
<li><a href="/abe/">Home</a></li>
<li><a href="/abe/editor">Home</a></li>
<li class="active">Hooks list</li>
</ol>

Expand Down
2 changes: 1 addition & 1 deletion src/server/views/list-url.html
Expand Up @@ -11,7 +11,7 @@

<div class="user-list row col-xs-offset-1 col-xs-10">
<ol class="breadcrumb">
<li><a href="/abe/">Home</a></li>
<li><a href="/abe/editor/">Home</a></li>
<li class="active">Url list</li>
</ol>

Expand Down
2 changes: 1 addition & 1 deletion src/server/views/partials/right-revisions.html
Expand Up @@ -17,7 +17,7 @@
<ul class="list-group">
{{#each manager.file.revision}}
<li class="list-group-item">
<a href="/abe/{{this.template}}?filePath={{this.filePath}}" class="version">
<a href="/abe/editor/{{this.template}}?filePath={{this.filePath}}" class="version">
{{@root.text.version}} {{this.version}}
<span class="label label-default label-{{this.publishedDate}} pull-right">
{{this.duration}}
Expand Down
2 changes: 1 addition & 1 deletion src/server/views/users/users-list.html
Expand Up @@ -11,7 +11,7 @@

<div class="user-list row col-xs-offset-1 col-xs-10">
<ol class="breadcrumb">
<li><a href="/abe/">Home</a></li>
<li><a href="/abe/editor/">Home</a></li>
<li class="active">User list</li>
</ol>

Expand Down
5 changes: 4 additions & 1 deletion test/fixtures/abe.json
Expand Up @@ -12,8 +12,11 @@
"test"
],
"routes": {
"review": [
"admin": [
"/abe.*"
],
"review": [
"/abe/test.*"
]
}
}
Expand Down
2 changes: 1 addition & 1 deletion test/fixtures/templates/isAuthorized.html
@@ -1,3 +1,3 @@
{{#isAuthorized '/abe' 'review'}}
{{#isAuthorized '/abe/truc' 'review'}}
test
{{/isAuthorized}}
6 changes: 2 additions & 4 deletions test/users.js
Expand Up @@ -402,12 +402,10 @@ describe('users', function() {

// test
var user = JSON.parse(JSON.stringify(this.fixture.users))[0]
var res = User.utils.isUserAllowedOnRoute(user, "/abe/test")
var res = User.utils.isUserAllowedOnRoute("admin", "/abe/test")
chai.expect(res).to.be.equal(true)

user.role.workflow = "review"
user.role.name = "review"
var res = User.utils.isUserAllowedOnRoute(user, "/abe")
var res = User.utils.isUserAllowedOnRoute("review", "/abe/truc")
chai.expect(res).to.be.equal(false)

// unstub
Expand Down

0 comments on commit fc65b3b

Please sign in to comment.