Skip to content

Commit

Permalink
Added content-gating module to members service
Browse files Browse the repository at this point in the history
no-issue

This should be used as the central place to manage permissions to
members content
  • Loading branch information
allouis committed Nov 5, 2019
1 parent 0689ae9 commit 6c97db2
Show file tree
Hide file tree
Showing 2 changed files with 41 additions and 0 deletions.
39 changes: 39 additions & 0 deletions core/server/services/members/content-gating.js
@@ -0,0 +1,39 @@
// @ts-check
/** @typedef { boolean } AccessFlag */

const PERMIT_ACCESS = true;
const BLOCK_ACCESS = false;

/**
* @param {object} post - A post object to check access to
* @param {object} member - The member whos access should be checked
*
* @returns {AccessFlag}
*/
function checkPostAccess(post, member) {
if (post.visibility === 'public') {
return PERMIT_ACCESS;
}

if (!member) {
return BLOCK_ACCESS;
}

if (post.visibility === 'members') {
return PERMIT_ACCESS;
}

const memberHasPlan = member.stripe && member.stripe.subscriptions && member.stripe.subscriptions.length;

if (post.visibility === 'paid' && memberHasPlan) {
return PERMIT_ACCESS;
}

return BLOCK_ACCESS;
}

module.exports = {
checkPostAccess,
PERMIT_ACCESS,
BLOCK_ACCESS
};
2 changes: 2 additions & 0 deletions core/server/services/members/index.js
Expand Up @@ -28,6 +28,8 @@ const membersService = {
return !!settings && settings.isPaid && settings.paymentProcessors.length !== 0;
},

contentGating: require('./content-gating'),

get api() {
if (!membersApi) {
membersApi = createMembersApiInstance();
Expand Down

0 comments on commit 6c97db2

Please sign in to comment.