mirror of
https://github.com/yu-i-i/overleaf-cep.git
synced 2026-11-14 22:23:42 +01:00
Merge pull request #25983 from overleaf/ii-managed-users-make-unmanaged-roles-access
[web] Prevent managers from removing/deleting themselves GitOrigin-RevId: 9287dc06bab8024bf03fecff678a4118a9456919
This commit is contained in:
@@ -162,6 +162,45 @@ const SubscriptionLocator = {
|
||||
}
|
||||
: null
|
||||
},
|
||||
|
||||
async getUserSubscriptionStatus(userId) {
|
||||
let usersSubscription = { personal: false, group: false }
|
||||
|
||||
if (!userId) {
|
||||
return usersSubscription
|
||||
}
|
||||
|
||||
const memberSubscriptions =
|
||||
await SubscriptionLocator.getMemberSubscriptions(userId)
|
||||
|
||||
const hasActiveGroupSubscription = memberSubscriptions.some(
|
||||
subscription =>
|
||||
subscription.recurlyStatus?.state === 'active' && subscription.groupPlan
|
||||
)
|
||||
if (hasActiveGroupSubscription) {
|
||||
// Member of a group plan
|
||||
usersSubscription = { ...usersSubscription, group: true }
|
||||
}
|
||||
|
||||
const personalSubscription =
|
||||
await SubscriptionLocator.getUsersSubscription(userId)
|
||||
|
||||
if (personalSubscription) {
|
||||
const hasActivePersonalSubscription =
|
||||
personalSubscription.recurlyStatus?.state === 'active'
|
||||
if (hasActivePersonalSubscription) {
|
||||
if (personalSubscription.groupPlan) {
|
||||
// Owner of a group plan
|
||||
usersSubscription = { ...usersSubscription, group: true }
|
||||
} else {
|
||||
// Owner of an individual plan
|
||||
usersSubscription = { ...usersSubscription, personal: true }
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return usersSubscription
|
||||
},
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
|
||||
@@ -132,6 +132,9 @@ async function viewInvite(req, res, next) {
|
||||
logger.error({ err }, 'error getting subscription admin email')
|
||||
}
|
||||
|
||||
const usersSubscription =
|
||||
await SubscriptionLocator.promises.getUserSubscriptionStatus(userId)
|
||||
|
||||
return res.render('subscriptions/team/invite-managed', {
|
||||
inviterName: invite.inviterName,
|
||||
inviteToken: invite.token,
|
||||
@@ -141,6 +144,7 @@ async function viewInvite(req, res, next) {
|
||||
groupSSOActive,
|
||||
subscriptionId: subscription._id.toString(),
|
||||
user: sessionUser,
|
||||
usersSubscription,
|
||||
})
|
||||
} else {
|
||||
let currentManagedUserAdminEmail
|
||||
|
||||
@@ -31,8 +31,11 @@ async function manageGroupMembers(req, res, next) {
|
||||
)
|
||||
const ssoConfig = await SSOConfig.findById(subscription.ssoConfig).exec()
|
||||
const plan = PlansLocator.findLocalPlanInSettings(subscription.planCode)
|
||||
const userId = SessionManager.getLoggedInUserId(req.session)
|
||||
const userId = SessionManager.getLoggedInUserId(req.session)?.toString()
|
||||
const isAdmin = subscription.admin_id.toString() === userId
|
||||
const isUserGroupManager =
|
||||
Boolean(subscription.manager_ids?.some(id => id.toString() === userId)) &&
|
||||
!isAdmin
|
||||
const recurlySubscription = subscription.recurlySubscription_id
|
||||
? await RecurlyClient.promises.getSubscription(
|
||||
subscription.recurlySubscription_id
|
||||
@@ -51,6 +54,7 @@ async function manageGroupMembers(req, res, next) {
|
||||
users,
|
||||
groupSize: subscription.membersLimit,
|
||||
managedUsersActive: subscription.managedUsersEnabled,
|
||||
isUserGroupManager,
|
||||
groupSSOActive: ssoConfig?.enabled,
|
||||
canUseFlexibleLicensing: plan?.canUseFlexibleLicensing,
|
||||
canUseAddSeatsFeature,
|
||||
|
||||
@@ -13,6 +13,7 @@ block append meta
|
||||
meta(name="ol-groupSSOActive" data-type="boolean" content=groupSSOActive)
|
||||
meta(name="ol-subscriptionId" data-type="string" content=subscriptionId)
|
||||
meta(name="ol-user" data-type="json" content=user)
|
||||
meta(name="ol-usersSubscription" data-type="json" content=usersSubscription)
|
||||
|
||||
block content
|
||||
main.content.content-alt.team-invite#invite-managed-root
|
||||
|
||||
@@ -10,6 +10,7 @@ block append meta
|
||||
meta(name="ol-groupName", data-type="string", content=name)
|
||||
meta(name="ol-groupSize", data-type="json", content=groupSize)
|
||||
meta(name="ol-managedUsersActive", data-type="boolean", content=managedUsersActive)
|
||||
meta(name="ol-isUserGroupManager", data-type="boolean", content=isUserGroupManager)
|
||||
meta(name="ol-groupSSOActive", data-type="boolean", content=groupSSOActive)
|
||||
meta(name="ol-canUseFlexibleLicensing", data-type="boolean", content=canUseFlexibleLicensing)
|
||||
meta(name="ol-canUseAddSeatsFeature", data-type="boolean", content=canUseAddSeatsFeature)
|
||||
|
||||
Reference in New Issue
Block a user