This commit is contained in:
David Arranz 2019-08-05 17:34:59 +02:00
parent 093f7244da
commit 20372c839b
5 changed files with 105 additions and 17 deletions

View File

@ -111,13 +111,18 @@ passport.use('jwt', new CustomStrategy(async (req, done) => {
//recuperamos el usuario de la petición //recuperamos el usuario de la petición
console.log(result); console.log(result);
let user = await authService.extraMethods.findUser({ id: result.id }); let user = await authService.extraMethods.findUser({ id: result.id });
if (user){ if (user) {
console.log('Usuario válido');
return done(null, user, { message: 'Logged in Successfully' }); return done(null, user, { message: 'Logged in Successfully' });
} }
else else {
console.log('Usuario no econtrado');
return done(null, false, { message: 'Unauthorized. User not found.' }); return done(null, false, { message: 'Unauthorized. User not found.' });
}
} }
else { else {
console.log('Token no válido');
return done(null, false, { message: 'Unauthorized. Invalid token.' }); return done(null, false, { message: 'Unauthorized. Invalid token.' });
} }

View File

@ -10,10 +10,10 @@ const isLoggedUser = passport.authenticate('jwt', { session: false });
const isAdministratorUser = compose([isLoggedUser, const isAdministratorUser = compose([isLoggedUser,
(req, res, next) => { (req, res, next) => {
const user = req.user; const user = req.user;
if (user.role >= 8) { if (user.level >= 8) {
next(); next();
} else { } else {
return res.status(httpStatus.UNAUTHORIZED).send('UNAUTHORIZED'); return res.status(httpStatus.UNAUTHORIZED).send('Unauthorized');
} }
} }
]); ]);

View File

@ -48,6 +48,10 @@ module.exports = function (sequelize, DataTypes) {
type: DataTypes.STRING, type: DataTypes.STRING,
defaultValue: 'active', defaultValue: 'active',
}, },
level: {
type: DataTypes.INTEGER,
defaultValue: 1,
},
lastlogin: { lastlogin: {
type: DataTypes.DATE, type: DataTypes.DATE,
defaultValue: null, defaultValue: null,
@ -61,7 +65,8 @@ module.exports = function (sequelize, DataTypes) {
User.associate = function (models) { User.associate = function (models) {
User.Roles = User.belongsToMany(models.Rol, { User.Roles = User.belongsToMany(models.Rol, {
through: models.UserRoles, through: models.UserRoles,
foreignKey: 'userId' foreignKey: 'userId',
as: 'roles'
}); });
User.Entity = User.belongsTo(models.Entity, { foreignKey: 'entityId' }); User.Entity = User.belongsTo(models.Entity, { foreignKey: 'entityId' });
User.EventsCreates = User.hasMany(models.Event, { foreignKey: 'userId' }); User.EventsCreates = User.hasMany(models.Event, { foreignKey: 'userId' });

View File

@ -53,14 +53,10 @@ module.exports = function (sequelize, DataTypes) {
timestamps: true, timestamps: true,
defaultScope: { defaultScope: {
where: { include: [{
state: 'publish'
},
include: [
{
model: sequelize.models.SpeakerType, model: sequelize.models.SpeakerType,
as: 'type' as: 'type'
}, },
/* { /* {
model: sequelize.models.Value, model: sequelize.models.Value,
as: 'values', as: 'values',
@ -98,6 +94,13 @@ module.exports = function (sequelize, DataTypes) {
}; };
Speaker.addScope('onlyPublished', {
where: {
state: 'publish'
},
});
Speaker.addScope('featured', { Speaker.addScope('featured', {
order: [ order: [
['updatedAt', 'DESC'] ['updatedAt', 'DESC']

View File

@ -16,14 +16,14 @@ const generalInvalidFields = [
// Todos los ponentes // Todos los ponentes
routes.get('/speakers', routes.get('/speakers',
//isLoggedUser, isLoggedUser,
FieldMiddleware.middleware({ FieldMiddleware.middleware({
invalidFields: generalInvalidFields invalidFields: generalInvalidFields
}), }),
PaginateMiddleware.middleware(), PaginateMiddleware.middleware(),
SortMiddleware.middleware({ default: "name" }), SortMiddleware.middleware({ default: "name" }),
speakerController.find({ speakerController.find({
scopes: ['defaultScope', 'includeValues', 'includeMultimedias'], scopes: ['defaultScope', 'onlyPublished', 'includeValues', 'includeMultimedias'],
}) })
); );
@ -36,7 +36,7 @@ routes.get('/speakers/featured',
PaginateMiddleware.middleware(), PaginateMiddleware.middleware(),
//SortMiddleware.middleware({ default: "name" }), //SortMiddleware.middleware({ default: "name" }),
speakerController.find({ speakerController.find({
scopes: ['defaultScope', 'includeValues', 'featured', 'includeMultimedias'], scopes: ['defaultScope', 'onlyPublished', 'includeValues', 'featured', 'includeMultimedias'],
}) })
); );
@ -49,7 +49,7 @@ routes.get('/speakers/last',
PaginateMiddleware.middleware(), PaginateMiddleware.middleware(),
SortMiddleware.middleware({ default: "-createdAt" }), SortMiddleware.middleware({ default: "-createdAt" }),
speakerController.find({ speakerController.find({
scopes: ['defaultScope', 'last', 'includeMultimedias'], scopes: ['defaultScope', 'onlyPublished', 'last', 'includeMultimedias'],
}) })
); );
@ -60,10 +60,11 @@ routes.get('/speakers/:id',
invalidFields: generalInvalidFields invalidFields: generalInvalidFields
}), }),
speakerController.findOne({ speakerController.findOne({
scopes: ['defaultScope', 'includeValues', 'includeMultimedias', 'includeComments'], scopes: ['defaultScope', 'onlyPublished', 'includeValues', 'includeMultimedias', 'includeComments'],
}) })
); );
// Dar ponentes similares a uno dado // Dar ponentes similares a uno dado
routes.get('/speakers/:id/similar', routes.get('/speakers/:id/similar',
isLoggedUser, isLoggedUser,
@ -88,6 +89,80 @@ routes.get('/speakers/:id/:association',
/*********************************************************************************************************
* ADMINISTRACIÓN
*********************************************************************************************************
*/
// Todos los ponentes
routes.get('/admin/speakers',
isAdministratorUser,
speakerController.find({
scopes: ['defaultScope', 'includeValues', 'includeMultimedias'],
})
);
// Un ponente
routes.get('/admin/speakers/:id',
isAdministratorUser,
speakerController.findOne({
scopes: ['defaultScope', 'includeValues', 'includeMultimedias']
})
);
// Comentarios de un ponente
routes.get('/admin/speakers/:id/comments',
isAdministratorUser,
(req, res, next) => {
req.params.association = 'comments';
next();
},
speakerController.find()
);
/*routes.get('/speakers/:id/values',
isAdministratorUser,
(req, res, next) => {
req.params.association = 'values';
next();
},
speakerController.find()
);
routes.get('/speakers/:id/questions',
isAdministratorUser,
(req, res, next) => {
req.params.association = 'questions';
next();
},
speakerController.find()
);*/
// Nuevo ponente
routes.post('/speakers/:id',
isAdministratorUser,
speakerController.create()
);
// Modificar ponente
routes.put('/speakers/:id',
isAdministratorUser,
speakerController.update()
);
// Borrar ponente
routes.delete('/speakers/:id',
isAdministratorUser,
speakerController.delete()
);
module.exports = routes; module.exports = routes;