Commit 43b54281 by GD-A-150752

profile-update

parent 5de1083e
...@@ -6,8 +6,16 @@ export const PERMISSIONS = { ...@@ -6,8 +6,16 @@ export const PERMISSIONS = {
CAN_SEE_ALL_USERS: 'CAN_SEE_ALL_USERS', CAN_SEE_ALL_USERS: 'CAN_SEE_ALL_USERS',
CAN_ACCESS_DASHBOARD_PAGE: 'CAN_ACCESS_DASHBOARD_PAGE', CAN_ACCESS_DASHBOARD_PAGE: 'CAN_ACCESS_DASHBOARD_PAGE',
CAN_UPDATE_SETTINGS: 'CAN_UPDATE_SETTINGS', CAN_UPDATE_SETTINGS: 'CAN_UPDATE_SETTINGS',
CAN_ACCESS_SETTINGS: 'CAN_ACCESS_SETTINGS',
CAN_ACCESS_EMAIL_TEMPLATES: 'CAN_ACCESS_EMAIL_TEMPLATES',
}; };
export enum ROLE_RANK {
ADMIN = 1,
USER,
BLOCKED,
}
export const CONFIG = { export const CONFIG = {
SiteName: 'JIBC', SiteName: 'JIBC',
}; };
import { Meteor } from 'meteor/meteor'; import { Meteor } from 'meteor/meteor';
import { first } from 'rxjs/operators'; import { first } from 'rxjs/operators';
import { rolesCollection } from '../collections/role.collection'; import { rolesCollection } from '../collections/role.collection';
import { PERMISSIONS } from '../config'; import { PERMISSIONS, ROLE_RANK } from '../config';
import { RoleModel } from '../models/role.model'; import { RoleModel } from '../models/role.model';
import { UtilsService } from '../services/utils.service'; import { UtilsService } from '../services/utils.service';
...@@ -17,4 +17,8 @@ Meteor.methods({ ...@@ -17,4 +17,8 @@ Meteor.methods({
throw new Meteor.Error('Unable to add.', JSON.stringify(e)); throw new Meteor.Error('Unable to add.', JSON.stringify(e));
} }
}, },
getRoleSlug(id): ROLE_RANK {
return rolesCollection.findOne(id).Slug;
},
}); });
...@@ -19,4 +19,19 @@ Meteor.methods({ ...@@ -19,4 +19,19 @@ Meteor.methods({
throw new Meteor.Error(403, 'Not Enough Permissions'); throw new Meteor.Error(403, 'Not Enough Permissions');
} }
}, },
updateEmailTemplates(setting: any): void {
if (UtilsService.hasPermission(PERMISSIONS.CAN_UPDATE_SETTINGS)) {
settingsCollection.update(setting.id, {
$set: {
Value: {
SUBJECT: setting.subject,
CONTENT: setting.content,
},
},
});
} else {
throw new Meteor.Error(403, 'Not Enough Permissions');
}
},
}); });
...@@ -28,13 +28,24 @@ Meteor.methods({ ...@@ -28,13 +28,24 @@ Meteor.methods({
}, },
}; };
const userId = Accounts.createUser(userObj); const userId = Accounts.createUser(userObj);
EmailService.sendVerificationEmail(user, userId); const usr = Accounts.findUserByUsername(user.username);
EmailService.sendVerificationEmail(usr, userId);
return userId; return userId;
} }
throw new Meteor.Error(422, 'Email address already in use.'); throw new Meteor.Error(422, 'Email address already in use.');
}, },
verifyEmailAddress(user: any): any {
if (Accounts.findUserByEmail(user.email)) {
const usr = Accounts.findUserByEmail(user.email);
EmailService.sendVerificationEmail(usr, user._id, user.email);
return true;
}
throw new Meteor.Error(422, 'Email address already in use.');
},
updateUser(user: any): any { updateUser(user: any): any {
if (!UtilsService.hasPermission(PERMISSIONS.CAN_UPDATE_OWN_USER)) { if (!UtilsService.hasPermission(PERMISSIONS.CAN_UPDATE_OWN_USER)) {
throw new Meteor.Error(403, 'Forbidden.'); throw new Meteor.Error(403, 'Forbidden.');
...@@ -50,6 +61,34 @@ Meteor.methods({ ...@@ -50,6 +61,34 @@ Meteor.methods({
} }
}, },
addEmailAddress(user: any): any {
if (!UtilsService.hasPermission(PERMISSIONS.CAN_UPDATE_OWN_USER)) {
throw new Meteor.Error(403, 'Forbidden.');
}
if (Accounts.findUserByEmail(user.email)) {
throw new Meteor.Error(422, 'Email address already in use.');
}
if (user._id && user.email) {
Accounts.addEmail(user._id, user.email);
return true;
}
throw new Meteor.Error(500, 'Email Address is missing.');
},
removeEmailAddress(user: any): any {
if (!UtilsService.hasPermission(PERMISSIONS.CAN_UPDATE_OWN_USER)) {
throw new Meteor.Error(403, 'Forbidden.');
}
if (user._id && user.email) {
Accounts.removeEmail(user._id, user.email);
return true;
}
throw new Meteor.Error(500, 'Email Address is missing.');
},
checkUserByEmail(email: string): any { checkUserByEmail(email: string): any {
return Accounts.findUserByEmail(email); return Accounts.findUserByEmail(email);
}, },
......
import { settingsCollection } from './collections/setting.collections'; import { settingsCollection } from './collections/setting.collections';
import { PERMISSIONS } from './config'; import { PERMISSIONS, ROLE_RANK } from './config';
import { rolesCollection } from './collections/role.collection'; import { rolesCollection } from './collections/role.collection';
import { Meteor } from 'meteor/meteor'; import { Meteor } from 'meteor/meteor';
...@@ -15,16 +15,19 @@ Migrations.add({ ...@@ -15,16 +15,19 @@ Migrations.add({
title: 'Admin', title: 'Admin',
permissions: allPermissions, permissions: allPermissions,
description: '', description: '',
Slug: ROLE_RANK.ADMIN,
}); });
rolesCollection.insert({ rolesCollection.insert({
title: 'User', title: 'User',
permissions: [PERMISSIONS.CAN_LOGIN, PERMISSIONS.CAN_UPDATE_OWN_USER], permissions: [PERMISSIONS.CAN_LOGIN, PERMISSIONS.CAN_UPDATE_OWN_USER],
description: '', description: '',
Slug: ROLE_RANK.USER,
}); });
rolesCollection.insert({ rolesCollection.insert({
title: 'Blocked', title: 'Blocked',
permissions: [], permissions: [],
description: '', description: '',
Slug: ROLE_RANK.BLOCKED,
}); });
} else { } else {
rolesCollection.update({ title: 'Admin' }, { $set: { permissions: allPermissions } }); rolesCollection.update({ title: 'Admin' }, { $set: { permissions: allPermissions } });
...@@ -35,18 +38,27 @@ Migrations.add({ ...@@ -35,18 +38,27 @@ Migrations.add({
// @ts-ignore // @ts-ignore
Migrations.add({ Migrations.add({
version: 2, version: 2,
name: 'Adding Admin User', name: 'Adding Admin & User',
up() { up() {
if (!Meteor.users.find({}).fetch().length) { if (!Meteor.users.find({}).fetch().length) {
Accounts.createUser({ Accounts.createUser({
username: 'admin', username: 'admin',
password: 'admin', password: 'Admin123',
email: 'ali.arshad@vqode.com', email: 'ali.arshad@vqode.com',
profile: { profile: {
name: 'Admin User', name: 'Admin User',
role: rolesCollection.findOne({ title: 'Admin' })._id, role: rolesCollection.findOne({ title: 'Admin' })._id,
}, },
}); });
Accounts.createUser({
username: 'lead',
password: 'Qweasdzxc1',
email: 'lead@mailinator.com',
profile: {
name: 'Lead',
role: rolesCollection.findOne({ title: 'User' })._id,
},
});
} }
}, },
}); });
......
import { ROLE_RANK } from '../config';
export interface RoleModel { export interface RoleModel {
_id?: string; _id?: string;
title: string; title: string;
permissions: string[]; permissions: string[];
Slug: ROLE_RANK;
description: string; description: string;
} }
import { settingsCollection } from '../collections/setting.collections'; import { settingsCollection } from '../collections/setting.collections';
import { UtilsService } from '../services/utils.service';
import { PERMISSIONS } from '../config';
import { Meteor } from 'meteor/meteor';
Meteor.publish('settings', () => settingsCollection.find({})); Meteor.publish('settings', () => {
if (UtilsService.hasPermission(PERMISSIONS.CAN_ACCESS_SETTINGS)) {
return settingsCollection.find({});
}
throw new Meteor.Error(403, 'Not Enough Permissions');
});
Meteor.publish('email-templates', () => {
if (UtilsService.hasPermission(PERMISSIONS.CAN_ACCESS_EMAIL_TEMPLATES)) {
return settingsCollection.find({ IsEmail: true });
}
throw new Meteor.Error(403, 'Not Enough Permissions');
});
import { CONFIG } from '../config'; import { CONFIG } from '../config';
import { settingsCollection } from '../collections/setting.collections'; import { settingsCollection } from '../collections/setting.collections';
import { rolesCollection } from "../collections/role.collection";
export class EmailService { export class EmailService {
static sendVerificationEmail(user: any, userId: string): void { static sendVerificationEmail(user: any, userId: string, email = false): void {
Accounts.emailTemplates.siteName = CONFIG.SiteName; Accounts.emailTemplates.siteName = CONFIG.SiteName;
const defaultRole = rolesCollection.findOne(user.profile.role);
// Will uncomment it later with domain email // Will uncomment it later with domain email
// Accounts.emailTemplates.from = CONFIG.DomainEmail; // Accounts.emailTemplates.from = CONFIG.DomainEmail;
...@@ -16,13 +18,15 @@ export class EmailService { ...@@ -16,13 +18,15 @@ export class EmailService {
const token = url.substr(url.lastIndexOf('/') + 1); const token = url.substr(url.lastIndexOf('/') + 1);
const link = `${process.env.appUrl}#/auth/verify-email/${token}`; const link = `${process.env.appUrl}#/auth/verify-email/${token}`;
const content: any = settingsCollection.findOne({ Key: 'REGISTER' }); const content: any = settingsCollection.findOne({ Key: 'REGISTER' });
return content.Value.CONTENT.replace(/\$name/g, user.name) return content.Value.CONTENT.replace(/\$name/g, user.profile.name)
.replace(/\$role/g, user.role) .replace(/\$role/g, defaultRole.title)
.replace(/\$link/g, link); .replace(/\$link/g, link);
}, },
}; };
const mail = email ? email : user.emails[0].address;
console.log(mail, userId);
Accounts.sendVerificationEmail(userId, user.email); Accounts.sendVerificationEmail(userId, mail);
} }
static sendForgotPasswordEmail(user: Meteor.User, email: string): void { static sendForgotPasswordEmail(user: Meteor.User, email: string): void {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment