2015-01-07 08:22:46 +01:00
|
|
|
'use strict';
|
|
|
|
|
2014-09-20 09:57:09 +09:00
|
|
|
can = {};
|
|
|
|
|
|
|
|
// Permissions
|
|
|
|
|
|
|
|
// user: Defaults to Meteor.user()
|
2015-01-07 08:22:46 +01:00
|
|
|
//
|
|
|
|
// return true if all is well, false
|
2015-02-05 09:32:43 +09:00
|
|
|
can.view = function (user) {
|
2015-01-07 08:22:46 +01:00
|
|
|
if (getSetting('requireViewInvite', false)) {
|
2014-09-20 09:57:09 +09:00
|
|
|
|
2015-01-07 08:22:46 +01:00
|
|
|
if (Meteor.isClient) {
|
2014-09-20 09:57:09 +09:00
|
|
|
// on client only, default to the current user
|
2015-01-05 17:51:54 +01:00
|
|
|
user = (typeof user === 'undefined') ? Meteor.user() : user;
|
2014-09-20 09:57:09 +09:00
|
|
|
}
|
|
|
|
|
2015-01-07 08:22:46 +01:00
|
|
|
return (!!user && (isAdmin(user) || isInvited(user)));
|
2014-09-20 09:57:09 +09:00
|
|
|
}
|
|
|
|
return true;
|
|
|
|
};
|
2015-02-05 09:32:43 +09:00
|
|
|
|
|
|
|
can.viewPendingPosts = function (user) {
|
|
|
|
user = (typeof user === 'undefined') ? Meteor.user() : user;
|
|
|
|
return isAdmin(user);
|
|
|
|
};
|
|
|
|
|
2015-02-22 09:05:47 +01:00
|
|
|
can.viewRejectedPosts = function (user) {
|
|
|
|
user = (typeof user === 'undefined') ? Meteor.user() : user;
|
|
|
|
return isAdmin(user);
|
|
|
|
};
|
|
|
|
|
2015-02-05 09:32:43 +09:00
|
|
|
can.viewById = function (userId) {
|
2014-09-20 09:57:09 +09:00
|
|
|
// if an invite is required to view, run permission check, else return true
|
2015-01-07 08:22:46 +01:00
|
|
|
if (getSetting('requireViewInvite', false)) {
|
|
|
|
return !!userId ? can.view(Meteor.users.findOne(userId)) : false;
|
2014-09-20 09:57:09 +09:00
|
|
|
}
|
|
|
|
return true;
|
|
|
|
};
|
2015-02-05 09:32:43 +09:00
|
|
|
can.post = function (user, returnError) {
|
2015-01-05 17:51:54 +01:00
|
|
|
user = (typeof user === 'undefined') ? Meteor.user() : user;
|
2014-09-20 09:57:09 +09:00
|
|
|
|
2015-01-07 08:22:46 +01:00
|
|
|
if (!user) {
|
2014-09-20 09:57:09 +09:00
|
|
|
return returnError ? "no_account" : false;
|
|
|
|
} else if (isAdmin(user)) {
|
|
|
|
return true;
|
|
|
|
} else if (getSetting('requirePostInvite')) {
|
|
|
|
if (user.isInvited) {
|
|
|
|
return true;
|
|
|
|
} else {
|
|
|
|
return returnError ? "no_invite" : false;
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
};
|
2015-02-05 09:32:43 +09:00
|
|
|
can.comment = function (user, returnError) {
|
2015-01-07 08:22:46 +01:00
|
|
|
return can.post(user, returnError);
|
2014-09-20 09:57:09 +09:00
|
|
|
};
|
2015-02-05 09:32:43 +09:00
|
|
|
can.vote = function (user, returnError) {
|
2015-01-07 08:22:46 +01:00
|
|
|
return can.post(user, returnError);
|
2014-09-20 09:57:09 +09:00
|
|
|
};
|
2015-02-05 09:32:43 +09:00
|
|
|
can.edit = function (user, item, returnError) {
|
2015-01-05 17:51:54 +01:00
|
|
|
user = (typeof user === 'undefined') ? Meteor.user() : user;
|
2015-01-07 08:22:46 +01:00
|
|
|
|
|
|
|
if (!user || !item || (user._id !== item.userId && !isAdmin(user))) {
|
2014-09-20 09:57:09 +09:00
|
|
|
return returnError ? "no_rights" : false;
|
2015-01-07 08:22:46 +01:00
|
|
|
} else {
|
2014-09-20 09:57:09 +09:00
|
|
|
return true;
|
|
|
|
}
|
|
|
|
};
|
2015-02-05 09:32:43 +09:00
|
|
|
can.editById = function (userId, item) {
|
2014-09-20 09:57:09 +09:00
|
|
|
var user = Meteor.users.findOne(userId);
|
2015-01-07 08:22:46 +01:00
|
|
|
return can.edit(user, item);
|
2014-09-20 09:57:09 +09:00
|
|
|
};
|
2015-02-05 09:32:43 +09:00
|
|
|
can.currentUserEdit = function (item) {
|
2015-01-07 08:22:46 +01:00
|
|
|
return can.edit(Meteor.user(), item);
|
2014-09-20 09:57:09 +09:00
|
|
|
};
|
2015-02-05 09:32:43 +09:00
|
|
|
can.invite = function (user) {
|
2014-09-20 09:57:09 +09:00
|
|
|
return isInvited(user) || isAdmin(user);
|
|
|
|
};
|