Vulcan/lib/permissions.js

108 lines
3.1 KiB
JavaScript
Raw Normal View History

2012-11-21 14:18:30 +09:00
// Permissions
// user: Defaults to Meteor.user()
// returnError: If there's an error, should we return what the problem is?
//
// return true if all is well, false || an error string if not
2013-10-25 10:26:57 +09:00
canView = function(user){
2012-11-21 14:18:30 +09:00
// console.log('canView', 'user:', user, 'returnError:', returnError, getSetting('requireViewInvite'));
2013-10-25 10:26:57 +09:00
if(getSetting('requireViewInvite', false)){
2013-10-25 10:26:57 +09:00
if(Meteor.isClient){
// on client only, default to the current user
var user=(typeof user === 'undefined') ? Meteor.user() : user;
// return false until settings have loaded
if(!Session.get('settingsLoaded'))
return false;
}
if(user && (isAdmin(user) || isInvited(user))){
// if logged in AND either admin or invited
2012-11-21 14:18:30 +09:00
return true;
}else{
2013-10-25 10:26:57 +09:00
return false;
2012-11-21 14:18:30 +09:00
}
2013-10-25 10:26:57 +09:00
2012-11-21 14:18:30 +09:00
}
2013-10-25 10:26:57 +09:00
return true;
2012-11-21 14:18:30 +09:00
}
canViewById = function(userId, returnError){
2013-10-25 10:26:57 +09:00
// if an invite is required to view, run permission check, else return true
if(getSetting('requireViewInvite', false)){
2013-10-25 10:26:57 +09:00
// if user is logged in, then run canView, else return false
return userId ? canView(Meteor.users.findOne(userId), returnError) : false;
}
return true;
}
2012-11-21 14:18:30 +09:00
canPost = function(user, returnError){
var user=(typeof user === 'undefined') ? Meteor.user() : user;
// console.log('canPost', user, action, getSetting('requirePostInvite'));
2012-11-21 14:31:58 +09:00
if(Meteor.isClient && !Session.get('settingsLoaded'))
2012-11-21 14:18:30 +09:00
return false;
if(!user){
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;
}
}
canPostById = function(userId, returnError){
var user = Meteor.users.findOne(userId);
return canPost(user, returnError);
}
2012-11-21 14:18:30 +09:00
canComment = function(user, returnError){
return canPost(user, returnError);
}
canCommentById = function(userId, returnError){
var user = Meteor.users.findOne(userId);
return canComment(user, returnError);
}
2012-11-21 14:18:30 +09:00
canUpvote = function(user, collection, returnError){
return canPost(user, returnError);
}
canUpvoteById = function(userId, returnError){
var user = Meteor.users.findOne(userId);
return canUpvote(user, returnError);
}
2012-11-21 14:18:30 +09:00
canDownvote = function(user, collection, returnError){
return canPost(user, returnError);
}
canDownvoteById = function(userId, returnError){
var user = Meteor.users.findOne(userId);
return canDownvote(user, returnError);
}
2012-11-21 14:18:30 +09:00
canEdit = function(user, item, returnError){
var user=(typeof user === 'undefined') ? Meteor.user() : user;
if (!user || !item){
return returnError ? "no_rights" : false;
} else if (isAdmin(user)) {
return true;
} else if (user._id!==item.userId) {
return returnError ? "no_rights" : false;
}else {
return true;
}
}
2013-04-26 17:28:09 +09:00
canEditById = function(userId, item){
var user = Meteor.users.findOne(userId);
2013-04-26 17:28:09 +09:00
return canEdit(user, item);
2013-10-10 11:41:11 +09:00
}
currentUserCanEdit = function(item) {
return canEdit(Meteor.user(), item);
2013-10-23 19:43:42 +09:00
}
canInvite = function(user){
return isInvited(user) || isAdmin(user);
2012-11-21 14:18:30 +09:00
}