Added svg icons, currently only for items

This commit is contained in:
Stefan Zermatten
2020-05-30 18:04:48 +02:00
parent 8138cd98f1
commit 060c44f384
19 changed files with 897 additions and 590 deletions

View File

@@ -17,6 +17,7 @@ import {
renewDocIds
} from '/imports/api/parenting/parenting.js';
import {setDocToLastOrder} from '/imports/api/parenting/order.js';
import { storedIconsSchema } from '/imports/api/icons/Icons.js';
let CreatureProperties = new Mongo.Collection('creatureProperties');
@@ -36,6 +37,10 @@ let CreaturePropertySchema = new SimpleSchema({
type: Boolean,
optional: true,
},
icon: {
type: storedIconsSchema,
optional: true,
}
});
for (let key in propertySchemasIndex){

View File

@@ -1,8 +1,10 @@
import SimpleSchema from 'simpl-schema';
import { ValidatedMethod } from 'meteor/mdg:validated-method';
import { assertAdmin } from '/imports/api/sharing/sharingPermissions.js';
let Icons = new Mongo.Collection('icons');
iconsSchema = new SimpleSchema({
let iconsSchema = new SimpleSchema({
name: {
type: String,
unique: true,
@@ -33,21 +35,57 @@ if (Meteor.isServer) {
});
}
const storedIconsSchema = new SimpleSchema({
name: {
type: String,
},
shape: {
type: String,
},
});
Icons.attachSchema(iconsSchema);
/*
console.warn("Write Icons is not secure, disable before deployment")
// This method does not validate icons against the schema, use wisely;
const writeIcons = new ValidatedMethod({
name: 'writeIcons',
name: 'icons.methods.write',
validate: null,
run(icons){
assertAdmin(this.userId);
if (Meteor.isServer){
this.unblock();
Icons.rawCollection().insert(icons, {ordered: false});
}
}
});
*/
export { writeIcons };
const findIcons = new ValidatedMethod({
name: 'icons.methods.find',
validate: new SimpleSchema({
search: {
type: String,
max: 30,
optional: true,
},
}).validator(),
run({search}){
if (!search) return [];
if (!Meteor.isServer) return;
return Icons.find(
{ $text: {$search: search} },
{
// relevant documents have a higher score.
fields: {
score: { $meta: 'textScore' }
},
// `score` property specified in the projection fields above.
sort: {
score: { $meta: 'textScore' }
}
}
).fetch();
}
})
export { writeIcons, findIcons, storedIconsSchema };
export default Icons;

View File

@@ -113,3 +113,17 @@ export function assertDocViewPermission(doc, userId){
let root = getRoot(doc);
assertViewPermission(root, userId);
}
export function assertAdmin(userId){
assertIdValid(userId);
let user = Meteor.users.findOne(userId, {fields: {roles: 1}});
if (!user){
throw new Meteor.Error('Permission denied',
'UserId does not match any existing user');
}
let isAdmin = user.roles && user.roles.includes('admin')
if (!isAdmin){
throw new Meteor.Error('Permission denied',
'User does not have the admin role');
}
}