forge/arma/ui/apps/logic/portalPermissions.js
2026-03-07 19:54:17 -06:00

76 lines
2.1 KiB
JavaScript

(function () {
const SharedLogic = (window.SharedLogic = window.SharedLogic || {});
SharedLogic.createPortalPermissions = function createPortalPermissions({
portalData,
session,
}) {
class OrgPortalPermissions {
getNormalizedRole() {
return String(session.role || "")
.trim()
.toUpperCase();
}
isDefaultOrg() {
return (
portalData.org.isDefault === true ||
String(portalData.org.tag || "")
.trim()
.toUpperCase() === "DEFAULT"
);
}
isOrgOwner() {
const ownerUid = String(
portalData.org.ownerUid || portalData.org.owner || "",
)
.trim()
.toLowerCase();
const actorUid = String(session.actorUid || "")
.trim()
.toLowerCase();
if (ownerUid && actorUid) {
return actorUid === ownerUid;
}
return (
String(session.actorName || "")
.trim()
.toLowerCase() ===
String(portalData.org.owner || "")
.trim()
.toLowerCase()
);
}
isSessionCeo() {
return session.ceo === true;
}
isOrgLeaderOrCeo() {
return (
this.isOrgOwner() ||
this.getNormalizedRole() === "LEADER" ||
(this.isDefaultOrg() && this.isSessionCeo())
);
}
canManageMembers() {
return this.isOrgLeaderOrCeo();
}
canManageTreasury() {
return this.isOrgLeaderOrCeo();
}
canDisbandOrg() {
return this.isOrgLeaderOrCeo();
}
}
return new OrgPortalPermissions();
};
})();