mirror of
https://github.com/overleaf/overleaf.git
synced 2025-04-05 05:18:21 +00:00
Merge pull request #1187 from sharelatex/ta-publisher-membership
Add Publisher Entity for UserMemberships GitOrigin-RevId: 862b1e4fe6d33b63ddfdaef47c02809c4558f9cc
This commit is contained in:
parent
be6950292d
commit
dffb6bc7a2
6 changed files with 82 additions and 0 deletions
|
@ -18,6 +18,9 @@ module.exports =
|
|||
requireInstitutionAccess: (req, res, next) ->
|
||||
requireAccessToEntity('institution', req.params.id, req, res, next)
|
||||
|
||||
requirePublisherAccess: (req, res, next) ->
|
||||
requireAccessToEntity('publisher', req.params.id, req, res, next)
|
||||
|
||||
requireGraphAccess: (req, res, next) ->
|
||||
requireAccessToEntity(
|
||||
req.query.resource_type, req.query.resource_id, req, res, next
|
||||
|
|
|
@ -62,3 +62,19 @@ module.exports =
|
|||
pathsFor: (id) ->
|
||||
addMember: "/manage/institutions/#{id}/managers"
|
||||
removeMember: "/manage/institutions/#{id}/managers"
|
||||
|
||||
publisher:
|
||||
modelName: 'Publisher'
|
||||
fields:
|
||||
primaryKey: 'slug'
|
||||
read: ['managerIds']
|
||||
write: 'managerIds'
|
||||
access: 'managerIds'
|
||||
name: 'name'
|
||||
translations:
|
||||
title: 'publisher_account'
|
||||
subtitle: 'managers_management'
|
||||
remove: 'remove_manager'
|
||||
pathsFor: (id) ->
|
||||
addMember: "/manage/publishers/#{id}/managers"
|
||||
removeMember: "/manage/publishers/#{id}/managers"
|
||||
|
|
|
@ -4,6 +4,7 @@ Errors = require('../Errors/Errors')
|
|||
EntityModels =
|
||||
Institution: require('../../models/Institution').Institution
|
||||
Subscription: require('../../models/Subscription').Subscription
|
||||
Publisher: require('../../models/Publisher').Publisher
|
||||
UserMembershipViewModel = require('./UserMembershipViewModel')
|
||||
UserGetter = require('../User/UserGetter')
|
||||
logger = require('logger-sharelatex')
|
||||
|
|
|
@ -43,3 +43,14 @@ module.exports =
|
|||
webRouter.delete "/manage/institutions/:id/managers/:userId",
|
||||
UserMembershipAuthorization.requireInstitutionAccess,
|
||||
UserMembershipController.remove
|
||||
|
||||
# publisher members routes
|
||||
webRouter.get "/manage/publishers/:id/managers",
|
||||
UserMembershipAuthorization.requirePublisherAccess,
|
||||
UserMembershipController.index
|
||||
webRouter.post "/manage/publishers/:id/managers",
|
||||
UserMembershipAuthorization.requirePublisherAccess,
|
||||
UserMembershipController.add
|
||||
webRouter.delete "/manage/publishers/:id/managers/:userId",
|
||||
UserMembershipAuthorization.requirePublisherAccess,
|
||||
UserMembershipController.remove
|
||||
|
|
34
services/web/app/coffee/models/Publisher.coffee
Normal file
34
services/web/app/coffee/models/Publisher.coffee
Normal file
|
@ -0,0 +1,34 @@
|
|||
mongoose = require 'mongoose'
|
||||
Schema = mongoose.Schema
|
||||
ObjectId = Schema.ObjectId
|
||||
settings = require 'settings-sharelatex'
|
||||
request = require 'request'
|
||||
|
||||
PublisherSchema = new Schema
|
||||
slug: { type: String, required: true }
|
||||
managerIds: [ type:ObjectId, ref:'User' ]
|
||||
|
||||
# fetch publisher's (brand on v1) data from v1 API. Errors are ignored
|
||||
PublisherSchema.method 'fetchV1Data', (callback = (error, publisher)->) ->
|
||||
request {
|
||||
baseUrl: settings.apis.v1.url
|
||||
url: "/api/v2/brands/#{this.slug}"
|
||||
method: 'GET'
|
||||
auth:
|
||||
user: settings.apis.v1.user
|
||||
pass: settings.apis.v1.pass
|
||||
sendImmediately: true
|
||||
}, (error, response, body) =>
|
||||
try parsedBody = JSON.parse(body) catch e
|
||||
this.name = parsedBody?.name
|
||||
this.partner = parsedBody?.partner
|
||||
callback(null, this)
|
||||
|
||||
conn = mongoose.createConnection(settings.mongo.url, {
|
||||
server: {poolSize: settings.mongo.poolSize || 10},
|
||||
config: {autoIndex: false}
|
||||
})
|
||||
|
||||
Publisher = conn.model 'Publisher', PublisherSchema
|
||||
exports.Publisher = Publisher
|
||||
exports.PublisherSchema = PublisherSchema
|
|
@ -29,6 +29,11 @@ describe 'UserMembershipHandler', ->
|
|||
v1Id: 123
|
||||
managerIds: [ObjectId(), ObjectId(), ObjectId()]
|
||||
update: sinon.stub().yields(null)
|
||||
@publisher =
|
||||
_id: 'mock-publisher-id'
|
||||
slug: 'slug'
|
||||
managerIds: [ObjectId(), ObjectId()]
|
||||
update: sinon.stub().yields(null)
|
||||
|
||||
@UserMembershipViewModel =
|
||||
buildAsync: sinon.stub().yields(null, { _id: 'mock-member-id'})
|
||||
|
@ -39,12 +44,15 @@ describe 'UserMembershipHandler', ->
|
|||
findOne: sinon.stub().yields(null, @institution)
|
||||
@Subscription =
|
||||
findOne: sinon.stub().yields(null, @subscription)
|
||||
@Publisher =
|
||||
findOne: sinon.stub().yields(null, @publisher)
|
||||
@UserMembershipHandler = SandboxedModule.require modulePath, requires:
|
||||
'./UserMembershipViewModel': @UserMembershipViewModel
|
||||
'../User/UserGetter': @UserGetter
|
||||
'../Errors/Errors': Errors
|
||||
'../../models/Institution': Institution: @Institution
|
||||
'../../models/Subscription': Subscription: @Subscription
|
||||
'../../models/Publisher': Publisher: @Publisher
|
||||
'logger-sharelatex':
|
||||
log: ->
|
||||
err: ->
|
||||
|
@ -94,6 +102,15 @@ describe 'UserMembershipHandler', ->
|
|||
expect(error).to.not.be.an.instanceof(Errors.NotFoundError)
|
||||
done()
|
||||
|
||||
describe 'publishers', ->
|
||||
it 'get publisher', (done) ->
|
||||
@UserMembershipHandler.getEntity @publisher.slug, EntityConfigs.publisher, @user, (error, institution) =>
|
||||
should.not.exist(error)
|
||||
expectedQuery = slug: @publisher.slug, managerIds: ObjectId(@user._id)
|
||||
assertCalledWith(@Publisher.findOne, expectedQuery)
|
||||
expect(institution).to.equal @publisher
|
||||
done()
|
||||
|
||||
describe 'getUsers', ->
|
||||
describe 'group', ->
|
||||
it 'build view model for all users', (done) ->
|
||||
|
|
Loading…
Reference in a new issue