improving invite and permission system

This commit is contained in:
Sacha Greif 2012-10-05 14:21:16 +09:00
parent 7419ff2cb0
commit ecb7d2b0f4
8 changed files with 45 additions and 11 deletions

View file

@ -8,9 +8,15 @@
{{/if}}
{{#if currentUser.isAdmin}}
<div class="control-group">
<label class="control-label">Require Invite?</label>
<label class="control-label">Require Invite to view?</label>
<div class="controls">
<input type="checkbox" name="requireInvite" id="requireInvite" {{#if requireInvite}}checked{{/if}} />
<input type="checkbox" name="requireViewInvite" id="requireViewInvite" {{#if requireViewInvite}}checked{{/if}} />
</div>
</div>
<div class="control-group">
<label class="control-label">Require Invite to post?</label>
<div class="controls">
<input type="checkbox" name="requirePostInvite" id="requirePostInvite" {{#if requirePostInvite}}checked{{/if}} />
</div>
</div>
<div class="control-group">

View file

@ -2,7 +2,8 @@ Template.settings.events = {
'click input[type=submit]': function(e){
e.preventDefault();
if(!Meteor.user()) throw 'You must be logged in.';
var requireInvite=!!$('#requireInvite').attr('checked');
var requireViewInvite=!!$('#requireViewInvite').attr('checked');
var requirePostInvite=!!$('#requirePostInvite').attr('checked');
var title= $('#title').val();
var theme = $('#theme').val();
var footerCode=$("#footerCode").val();
@ -24,7 +25,8 @@ Template.settings.events = {
if(prevSetting){
Settings.update(prevSetting._id,{
$set: {
requireInvite:requireInvite,
requireViewInvite:requireViewInvite,
requirePostInvite:requirePostInvite,
title: title,
theme: theme,
footerCode: footerCode,
@ -48,7 +50,8 @@ Template.settings.events = {
});
}else{
var settingId = Settings.insert({
requireInvite:requireInvite,
requireViewInvite:requireViewInvite,
requirePostInvite:requirePostInvite,
title: title,
theme: theme,
footerCode: footerCode,

View file

@ -0,0 +1,5 @@
<template name="no_account">
<div class="grid-small grid-block dialog">
<p>Sorry, this is a private site. Please sign up first.</p>
</div>
</template>

View file

View file

@ -0,0 +1,5 @@
<template name="no_invite">
<div class="grid-small grid-block dialog">
<p>Sorry, you will need to be invited before you have access to the site.</p>
</div>
</template>

View file

View file

@ -14,7 +14,7 @@
</td>
<td><a href="#">{{comments_count}}</a></td>
<td>{{karma}}</td>
<td>{{#if isInvited}}<i class="icon-check"></i>{{else}}<a href="#" class="invite-link">Invite</a>{{/if}}</td>
<td>{{#if isAdmin}}<i class="icon-check"></i>{{else}}<a href="#" class="admin-link">Make admin</a>{{/if}}</td>
<td>{{#if isInvited}}<a class="uninvite-link" href="#"><i class="icon-check"></i>Uninvite</a>{{else}}<a href="#" class="invite-link">Invite</a>{{/if}}</td>
<td>{{#if isAdmin}}<a class="unadmin-link" href="#"><i class="icon-check unadmin-link"></i>Unadmin</a>{{else}}<a href="#" class="admin-link">Make admin</a>{{/if}}</td>
</tr>
</template>

View file

@ -49,6 +49,21 @@ userProfileComplete = function(user) {
// Permissions
canView = function(user){
if(getSetting('requireViewInvite')==true){
if(!user){
Router.goto('no_account');
return false;
}
if(isAdmin(user))
return true;
if(user.isInvited){
return true;
}else{
Router.goto('no_invite');
return false;
}
}
return true;
}
canUpvote = function(user, collection){
@ -56,7 +71,7 @@ canUpvote = function(user, collection){
return false
if(isAdmin(user))
return true;
if(getSetting('requireInvite')==true){
if(getSetting('requirePostInvite')==true){
return user.isInvited;
}
return true;
@ -66,7 +81,7 @@ canDownvote = function(user, collection){
return false
if(isAdmin(user))
return true;
if(getSetting('requireInvite')==true){
if(getSetting('requirePostInvite')==true){
return user.isInvited;
}
return true;
@ -76,7 +91,7 @@ canPost = function(user){
return false
if(isAdmin(user))
return true;
if(getSetting('requireInvite')==true){
if(getSetting('requirePostInvite')==true){
return user.isInvited;
}
return true;
@ -86,7 +101,7 @@ canComment = function(user){
return false;
if(isAdmin(user))
return true;
if(getSetting('requireInvite')==true){
if(getSetting('requirePostInvite')==true){
return user.isInvited;
}
return true;