primera version de ACL
This commit is contained in:
parent
bcd4cedbcd
commit
2ab756a403
|
@ -3,6 +3,7 @@
|
||||||
<head>
|
<head>
|
||||||
<meta charset="UTF-8">
|
<meta charset="UTF-8">
|
||||||
<title>Salix</title>
|
<title>Salix</title>
|
||||||
|
<script src="/salix/acl"></script>
|
||||||
</head>
|
</head>
|
||||||
<body ng-app="salix">
|
<body ng-app="salix">
|
||||||
<vn-app></vn-app>
|
<vn-app></vn-app>
|
||||||
|
|
|
@ -9,6 +9,17 @@ module.exports = function (app) {
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
app.get('/acl', function(req, res){
|
||||||
|
let token = req.cookies.vnToken;
|
||||||
|
validateToken(token, function(isValid) {
|
||||||
|
if (isValid)
|
||||||
|
sendUserRole(res);
|
||||||
|
else
|
||||||
|
sendACL(res, {});
|
||||||
|
});
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
app.get('/login', function (req, res) {
|
app.get('/login', function (req, res) {
|
||||||
let token = req.query.token;
|
let token = req.query.token;
|
||||||
let continueUrl = req.query.continue;
|
let continueUrl = req.query.continue;
|
||||||
|
@ -33,6 +44,9 @@ module.exports = function (app) {
|
||||||
function validateToken(tokenId, cb) {
|
function validateToken(tokenId, cb) {
|
||||||
app.models.AccessToken.findById(tokenId, function(err, token) {
|
app.models.AccessToken.findById(tokenId, function(err, token) {
|
||||||
if (token) {
|
if (token) {
|
||||||
|
if(token.userId){
|
||||||
|
app.currentUser = {id: token.userId};
|
||||||
|
}
|
||||||
token.validate (function (err, isValid) {
|
token.validate (function (err, isValid) {
|
||||||
cb(isValid === true);
|
cb(isValid === true);
|
||||||
});
|
});
|
||||||
|
@ -42,6 +56,39 @@ module.exports = function (app) {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function sendUserRole(res){
|
||||||
|
if(app.currentUser && app.currentUser.id){
|
||||||
|
let query = {
|
||||||
|
"where": {
|
||||||
|
"principalId": `${app.currentUser.id}`,
|
||||||
|
"principalType": "USER"
|
||||||
|
},
|
||||||
|
"include": {
|
||||||
|
"relation": "role",
|
||||||
|
"scope": {
|
||||||
|
"fields": ["name"]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
app.models.RoleMapping.find(query, function(err, roles){
|
||||||
|
if(roles){
|
||||||
|
let acl = {};
|
||||||
|
Object.keys(roles).forEach(function(_, i){
|
||||||
|
if(roles[i].roleId){
|
||||||
|
let rol = roles[i].role();
|
||||||
|
acl[rol.name] = true;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
sendACL(res, acl);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
sendACL(res, {});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
else
|
||||||
|
sendACL(res, {});
|
||||||
|
}
|
||||||
|
|
||||||
function redirectToAuth (res, continueUrl) {
|
function redirectToAuth (res, continueUrl) {
|
||||||
let authUrl = app.get('url auth');
|
let authUrl = app.get('url auth');
|
||||||
let params = {
|
let params = {
|
||||||
|
@ -51,6 +98,12 @@ module.exports = function (app) {
|
||||||
res.clearCookie ('vnToken');
|
res.clearCookie ('vnToken');
|
||||||
res.redirect(`${authUrl}/?${encodeUri(params)}`);
|
res.redirect(`${authUrl}/?${encodeUri(params)}`);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function sendACL(res, acl){
|
||||||
|
let aclStr = JSON.stringify(acl);
|
||||||
|
res.header('Content-Type', 'application/javascript; charset=UTF-8');
|
||||||
|
res.send(`(function(window){window.Salix = window.Salix || {}; window.Salix.acl = window.Salix.acl || {}; window.Salix.acl = ${aclStr}; })(window)`);
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
function encodeUri(object) {
|
function encodeUri(object) {
|
||||||
|
|
Loading…
Reference in New Issue