feat: migrate from org to workspace under phase 3 (#14158)
* migration from organization to workspace on code level * updated a few more files * fixed runtime errors * update org settings URL * Renamed organizationId in domain objects * changed field named from organization to workspace * Reverted AppsmithRole changes * fixed migrations * recreating indexes * migration update * seed data runs before migration, undo changes * mock commit * seedmongo to populate upgraded data, datasource upgrade * fixed two test cases * updated migrations * updated prop name * Upgraded AclPermission * comment * migrated AppsmithRole * more changes * final set of changes * variable name changes * update cypress variable name * Update app/server/appsmith-server/src/main/java/com/appsmith/server/controllers/ce/ApplicationControllerCE.java * Update app/server/appsmith-interfaces/src/main/java/com/appsmith/external/models/Datasource.java Co-authored-by: Trisha Anand <trisha@appsmith.com> * reverting encryption handler change * refactor code to migrate from org to workspace * migrated a few missed out org to workspace * updated a few more * migrated a few missed out org to workspace * migration changes * Removed Permission import * reverted code change * few more changes * fixed failing cypress test * fixed failing cypress test Co-authored-by: Sidhant Goel <sidhant@appsmith.com> Co-authored-by: Trisha Anand <trisha@appsmith.com> Co-authored-by: Sidhant Goel <sidhant@hexcod.in>
This commit is contained in:
parent
5d166a46f1
commit
3933f5f4d1
|
|
@ -108,7 +108,7 @@ describe("Import, Export and Fork application and validate data binding", functi
|
|||
cy.writeFile("cypress/fixtures/exportedApp.json", body, "utf-8");
|
||||
cy.generateUUID().then((uid) => {
|
||||
workspaceId = uid;
|
||||
localStorage.setItem("OrgName", workspaceId);
|
||||
localStorage.setItem("WorkspaceName", workspaceId);
|
||||
cy.createWorkspace();
|
||||
cy.wait("@createWorkspace").then((createWorkspaceInterception) => {
|
||||
newWorkspaceName =
|
||||
|
|
|
|||
|
|
@ -11,7 +11,7 @@ describe("Reconnect Datasource Modal validation while importing application", fu
|
|||
// import application
|
||||
cy.generateUUID().then((uid) => {
|
||||
workspaceId = uid;
|
||||
localStorage.setItem("OrgName", workspaceId);
|
||||
localStorage.setItem("WorkspaceName", workspaceId);
|
||||
cy.createWorkspace();
|
||||
cy.wait("@createWorkspace").then((createWorkspaceInterception) => {
|
||||
newWorkspaceName = createWorkspaceInterception.response.body.data.name;
|
||||
|
|
|
|||
|
|
@ -47,7 +47,7 @@ describe("Export application as a JSON file", function() {
|
|||
cy.generateUUID().then((uid) => {
|
||||
workspaceId = uid;
|
||||
appid = uid;
|
||||
localStorage.setItem("OrgName", workspaceId);
|
||||
localStorage.setItem("WorkspaceName", workspaceId);
|
||||
cy.createWorkspace();
|
||||
cy.wait("@createWorkspace").then((interception) => {
|
||||
newWorkspaceName = interception.response.body.data.name;
|
||||
|
|
@ -97,7 +97,7 @@ describe("Export application as a JSON file", function() {
|
|||
cy.generateUUID().then((uid) => {
|
||||
workspaceId = uid;
|
||||
appid = uid;
|
||||
localStorage.setItem("OrgName", workspaceId);
|
||||
localStorage.setItem("WorkspaceName", workspaceId);
|
||||
cy.createWorkspace();
|
||||
cy.wait("@createWorkspace").then((interception) => {
|
||||
newWorkspaceName = interception.response.body.data.name;
|
||||
|
|
@ -147,7 +147,7 @@ describe("Export application as a JSON file", function() {
|
|||
cy.generateUUID().then((uid) => {
|
||||
workspaceId = uid;
|
||||
appid = uid;
|
||||
localStorage.setItem("OrgName", workspaceId);
|
||||
localStorage.setItem("WorkspaceName", workspaceId);
|
||||
cy.createWorkspace();
|
||||
cy.wait("@createWorkspace").then((interception) => {
|
||||
newWorkspaceName = interception.response.body.data.name;
|
||||
|
|
|
|||
|
|
@ -10,7 +10,7 @@ describe("Create workspace and a new app / delete and recreate app", function()
|
|||
cy.generateUUID().then((uid) => {
|
||||
workspaceId = uid;
|
||||
appid = uid;
|
||||
localStorage.setItem("OrgName", workspaceId);
|
||||
localStorage.setItem("WorkspaceName", workspaceId);
|
||||
cy.createWorkspace();
|
||||
cy.wait("@createWorkspace").then((interception) => {
|
||||
newWorkspaceName = interception.response.body.data.name;
|
||||
|
|
|
|||
|
|
@ -10,7 +10,7 @@ describe("Create app same name in different workspace", function() {
|
|||
cy.generateUUID().then((uid) => {
|
||||
workspaceId = uid;
|
||||
appid = uid;
|
||||
localStorage.setItem("OrgName", workspaceId);
|
||||
localStorage.setItem("WorkspaceName", workspaceId);
|
||||
cy.createWorkspace();
|
||||
// stub the response and
|
||||
// find app name
|
||||
|
|
|
|||
|
|
@ -12,7 +12,7 @@ describe("Delete workspace test spec", function() {
|
|||
newWorkspaceName = interception.response.body.data.name;
|
||||
cy.visit("/applications");
|
||||
cy.openWorkspaceOptionsPopup(newWorkspaceName);
|
||||
cy.contains("Delete Organization").click();
|
||||
cy.contains("Delete Workspace").click();
|
||||
cy.contains("Are you sure").click();
|
||||
cy.wait("@deleteWorkspaceApiCall").then((httpResponse) => {
|
||||
expect(httpResponse.status).to.equal(200);
|
||||
|
|
@ -29,7 +29,7 @@ describe("Delete workspace test spec", function() {
|
|||
newWorkspaceName = interception.response.body.data.name;
|
||||
cy.visit("/applications");
|
||||
cy.openWorkspaceOptionsPopup(newWorkspaceName);
|
||||
cy.contains("Delete Organization");
|
||||
cy.contains("Delete Workspace");
|
||||
cy.inviteUserForWorkspace(
|
||||
newWorkspaceName,
|
||||
Cypress.env("TESTUSERNAME1"),
|
||||
|
|
@ -40,7 +40,7 @@ describe("Delete workspace test spec", function() {
|
|||
cy.visit("/applications");
|
||||
cy.openWorkspaceOptionsPopup(newWorkspaceName);
|
||||
cy.get(homePage.workspaceNamePopoverContent)
|
||||
.contains("Delete Organization")
|
||||
.contains("Delete Workspace")
|
||||
.should("not.exist");
|
||||
cy.LogOut();
|
||||
});
|
||||
|
|
|
|||
|
|
@ -14,7 +14,7 @@ describe("Leave workspace test spec", function() {
|
|||
newWorkspaceId = interception.response.body.data.name;
|
||||
cy.visit("/applications");
|
||||
cy.openWorkspaceOptionsPopup(newWorkspaceName);
|
||||
cy.contains("Leave Organization");
|
||||
cy.contains("Leave Workspace");
|
||||
});
|
||||
});
|
||||
|
||||
|
|
@ -26,7 +26,7 @@ describe("Leave workspace test spec", function() {
|
|||
newWorkspaceId = interception.response.body.data.name;
|
||||
cy.visit("/applications");
|
||||
cy.openWorkspaceOptionsPopup(newWorkspaceName);
|
||||
cy.contains("Leave Organization").click();
|
||||
cy.contains("Leave Workspace").click();
|
||||
cy.contains("Are you sure").click();
|
||||
cy.wait("@leaveWorkspaceApiCall").then((httpResponse) => {
|
||||
expect(httpResponse.status).to.equal(400);
|
||||
|
|
@ -56,7 +56,7 @@ describe("Leave workspace test spec", function() {
|
|||
.find("a")
|
||||
.should("have.length", 1)
|
||||
.first()
|
||||
.contains("Leave Organization");
|
||||
.contains("Leave Workspace");
|
||||
});
|
||||
});
|
||||
});
|
||||
|
|
|
|||
|
|
@ -11,7 +11,7 @@ describe("Create new workspace and invite user & validate all roles", () => {
|
|||
cy.get("@guid").then((uid) => {
|
||||
workspaceId = uid;
|
||||
appid = uid;
|
||||
//localStorage.setItem("OrgName", workspaceId);
|
||||
//localStorage.setItem("WorkspaceName", workspaceId);
|
||||
homePage.CreateNewWorkspace(workspaceId);
|
||||
homePage.CheckWorkspaceShareUsersCount(workspaceId, 1);
|
||||
homePage.InviteUserToWorkspace(
|
||||
|
|
@ -95,7 +95,11 @@ describe("Create new workspace and invite user & validate all roles", () => {
|
|||
cy.get(homePage._applicationCard)
|
||||
.first()
|
||||
.trigger("mouseover");
|
||||
homePage.InviteUserToWorkspace(workspaceId, Cypress.env("TESTUSERNAME2"), "App Viewer");
|
||||
homePage.InviteUserToWorkspace(
|
||||
workspaceId,
|
||||
Cypress.env("TESTUSERNAME2"),
|
||||
"App Viewer",
|
||||
);
|
||||
homePage.LogOutviaAPI();
|
||||
});
|
||||
|
||||
|
|
|
|||
|
|
@ -14,7 +14,7 @@ describe("Create new workspace and share with a user", function() {
|
|||
cy.generateUUID().then((uid) => {
|
||||
workspaceId = uid;
|
||||
appid = uid;
|
||||
localStorage.setItem("OrgName", workspaceId);
|
||||
localStorage.setItem("WorkspaceName", workspaceId);
|
||||
cy.createWorkspace();
|
||||
cy.wait("@createWorkspace").then((interception) => {
|
||||
newWorkspaceName = interception.response.body.data.name;
|
||||
|
|
|
|||
|
|
@ -8,7 +8,7 @@ describe("Update Workspace", function() {
|
|||
cy.NavigateToHome();
|
||||
cy.generateUUID().then((uid) => {
|
||||
workspaceId = uid;
|
||||
localStorage.setItem("OrgName", workspaceId);
|
||||
localStorage.setItem("WorkspaceName", workspaceId);
|
||||
cy.createWorkspace();
|
||||
cy.wait("@createWorkspace").then((interception) => {
|
||||
newWorkspaceName = interception.response.body.data.name;
|
||||
|
|
@ -18,7 +18,7 @@ describe("Update Workspace", function() {
|
|||
});
|
||||
cy.generateUUID().then((uid) => {
|
||||
workspaceId = uid;
|
||||
localStorage.setItem("OrgName", workspaceId);
|
||||
localStorage.setItem("WorkspaceName", workspaceId);
|
||||
cy.get(homePage.workspaceNameInput).click({ force: true });
|
||||
cy.get(homePage.workspaceNameInput).clear();
|
||||
cy.get(homePage.workspaceNameInput).type(workspaceId);
|
||||
|
|
|
|||
|
|
@ -38,7 +38,7 @@ describe("Workspace Import Application", function() {
|
|||
|
||||
cy.generateUUID().then((uid) => {
|
||||
workspaceId = uid;
|
||||
localStorage.setItem("OrgName", workspaceId);
|
||||
localStorage.setItem("WorkspaceName", workspaceId);
|
||||
cy.createWorkspace();
|
||||
cy.wait("@createWorkspace").then((createWorkspaceInterception) => {
|
||||
newWorkspaceName =
|
||||
|
|
|
|||
|
|
@ -12,7 +12,7 @@ describe("Workspace Settings validation spec", function() {
|
|||
workspaceId =
|
||||
"kadjhfkjadsjkfakjdscajdsnckjadsnckadsjcnanakdjsnckjdscnakjdscnnadjkncakjdsnckjadsnckajsdfkjadshfkjsdhfjkasdhfkjasdhfjkasdhjfasdjkfhjhdsfjhdsfjhadasdfasdfadsasdf" +
|
||||
uid;
|
||||
localStorage.setItem("OrgName", workspaceId);
|
||||
localStorage.setItem("WorkspaceName", workspaceId);
|
||||
// create workspace with long name
|
||||
cy.createWorkspace();
|
||||
// stub the response and
|
||||
|
|
|
|||
|
|
@ -10,7 +10,7 @@ describe("Check if workspace has user icons on homepage", function() {
|
|||
cy.NavigateToHome();
|
||||
cy.generateUUID().then((uid) => {
|
||||
workspaceId = uid;
|
||||
localStorage.setItem("OrgName", workspaceId);
|
||||
localStorage.setItem("WorkspaceName", workspaceId);
|
||||
cy.createWorkspace();
|
||||
cy.wait("@createWorkspace").then((interception) => {
|
||||
newWorkspaceName = interception.response.body.data.name;
|
||||
|
|
|
|||
|
|
@ -11,7 +11,8 @@ describe("Workspace name validation spec", function() {
|
|||
cy.wait("@createWorkspace").then((interception) => {
|
||||
newWorkspaceName = interception.response.body.data.name;
|
||||
cy.NavigateToHome();
|
||||
cy.contains(newWorkspaceName)
|
||||
cy.get(".t--applications-container")
|
||||
.contains(newWorkspaceName)
|
||||
.closest(homePage.workspaceCompleteSection)
|
||||
.find(homePage.workspaceNamePopover)
|
||||
.find(homePage.optionsIcon)
|
||||
|
|
|
|||
|
|
@ -21,13 +21,13 @@ export default {
|
|||
homeIcon: ".t--appsmith-logo",
|
||||
inputAppName: "input[name=applicationName]",
|
||||
createNew: ".createnew",
|
||||
createWorkspace: "span:contains('New Organization')",
|
||||
createWorkspace: "span:contains('New Workspace')",
|
||||
inputWorkspaceName: "//input[@name='name']",
|
||||
submitBtn: "//span[text()='Submit']",
|
||||
workspaceMenu: "//span[text()='TestShareOrg']",
|
||||
workspaceMenu: "//span[text()='TestShareWorkspace']",
|
||||
members: "//span[contains(text(),'Members')]",
|
||||
share: "//span[contains(text(),'Share')]",
|
||||
WorkspaceSettings: "//span[contains(text(),'Organization Settings')]",
|
||||
WorkspaceSettings: "//span[contains(text(),'Workspace Settings')]",
|
||||
MemberSettings: "//span[contains(text(),'Members')]",
|
||||
inviteUser: "//span[text()='Invite Users']",
|
||||
inviteUserMembersPage: "[data-cy=t--invite-users]",
|
||||
|
|
|
|||
|
|
@ -37,24 +37,24 @@ describe("Checking for error message on Workspace Name ", function() {
|
|||
});
|
||||
it("User must not be able to add empty workspace name", function() {
|
||||
// Navigate to home Page
|
||||
// Click on the "Create Organisation" button
|
||||
// Ensure "Organisation Name" field is empty
|
||||
// Click on the "Create Workspace" button
|
||||
// Ensure "Workspace Name" field is empty
|
||||
// Ensure "Submit" is inactive
|
||||
});
|
||||
|
||||
it("Cancel creating an Workspace when the Workspace name is empty", function() {
|
||||
// Navigate to home Page
|
||||
// Click on the "Create Organisation" button
|
||||
// Ensure "Organisation Name" field is empty
|
||||
// Click on the "Create Workspace" button
|
||||
// Ensure "Workspace Name" field is empty
|
||||
// Click on "Cancel" option
|
||||
// Observe the organisation is not created
|
||||
// Observe the workspace is not created
|
||||
});
|
||||
|
||||
it("Cancel creating an Workspace when the Workspace name is dually filled", function() {
|
||||
// Navigate to home Page
|
||||
// Click on the "Create Organisation" button
|
||||
// Ensure "Organisation Name" field is enterd respectively
|
||||
// Click on the "Create Workspace" button
|
||||
// Ensure "Workspace Name" field is enterd respectively
|
||||
// Click on "Cancel" option
|
||||
// Observe the organisation is not created
|
||||
// Observe the workspace is not created
|
||||
});
|
||||
});
|
||||
|
|
|
|||
|
|
@ -72,7 +72,7 @@ export class HomePage {
|
|||
|
||||
public CreateNewWorkspace(workspaceNewName: string) {
|
||||
let oldName: string = "";
|
||||
cy.xpath(this._visibleTextSpan("New Organization"))
|
||||
cy.xpath(this._visibleTextSpan("New Workspace"))
|
||||
.should("be.visible")
|
||||
.first()
|
||||
.click({ force: true });
|
||||
|
|
@ -88,7 +88,8 @@ export class HomePage {
|
|||
}
|
||||
|
||||
public RenameWorkspace(workspaceName: string, newWorkspaceName: string) {
|
||||
cy.contains(workspaceName)
|
||||
cy.get(this._appContainer)
|
||||
.contains(workspaceName)
|
||||
.closest(this._workspaceCompleteSection)
|
||||
.find(this._workspaceName)
|
||||
.find(this._optionsIcon)
|
||||
|
|
|
|||
|
|
@ -22,7 +22,8 @@ Cypress.Commands.add("createWorkspace", () => {
|
|||
});
|
||||
|
||||
Cypress.Commands.add("renameWorkspace", (workspaceName, newWorkspaceName) => {
|
||||
cy.contains(workspaceName)
|
||||
cy.get(".t--applications-container")
|
||||
.contains(workspaceName)
|
||||
.closest(homePage.workspaceCompleteSection)
|
||||
.find(homePage.workspaceNamePopover)
|
||||
.find(homePage.optionsIcon)
|
||||
|
|
|
|||
|
|
@ -190,7 +190,7 @@ export const SIGN_IN = () => `Sign in`;
|
|||
export const CREATE_NEW_APPLICATION = () => `Create new`;
|
||||
export const SEARCH_APPS = () => `Search for apps...`;
|
||||
export const GETTING_STARTED = () => `GETTING STARTED`;
|
||||
export const WORKSPACES_HEADING = () => `ORGANIZATIONS`;
|
||||
export const WORKSPACES_HEADING = () => `WORKSPACES`;
|
||||
export const WELCOME_TOUR = () => `Welcome Tour`;
|
||||
export const NO_APPS_FOUND = () =>
|
||||
`Whale! Whale! This name doesn't ring a bell!`;
|
||||
|
|
@ -511,7 +511,7 @@ export const SELECT_A_METHOD_TO_ADD_CREDENTIALS = () =>
|
|||
"Select a method to add credentials";
|
||||
export const DELETE_CONFIRMATION_MODAL_TITLE = () => `Are you sure?`;
|
||||
export const DELETE_CONFIRMATION_MODAL_SUBTITLE = (name?: string | null) =>
|
||||
`You want to remove ${name} from this organization`;
|
||||
`You want to remove ${name} from this workspace`;
|
||||
export const PARSING_ERROR = () =>
|
||||
"Syntax Error: Unable to parse code, please check error logs to debug";
|
||||
export const PARSING_WARNING = () =>
|
||||
|
|
@ -1089,7 +1089,7 @@ export const GENERATE_APPLICATION_TITLE = () => "Generate Page";
|
|||
export const GENERATE_APPLICATION_DESCRIPTION = () =>
|
||||
"Quickly generate a page to perform CRUD operations on your database tables";
|
||||
export const DELETE_WORKSPACE_SUCCESSFUL = () =>
|
||||
"Organization deleted successfully";
|
||||
"Workspace deleted successfully";
|
||||
// theming
|
||||
export const CHANGE_APP_THEME = (name: string) => `Theme ${name} Applied`;
|
||||
export const SAVE_APP_THEME = (name: string) => `Theme ${name} Saved`;
|
||||
|
|
@ -1202,7 +1202,7 @@ export const EMPTY_DATASOURCE_BUTTON_TEXT = () => "NEW DATASOURCE";
|
|||
export const MORE = () => "MORE";
|
||||
export const SHOW_LESS = () => "SHOW LESS";
|
||||
export const CHOOSE_WHERE_TO_FORK = () => "Choose where to fork the template";
|
||||
export const SELECT_WORKSPACE = () => "Select Organization";
|
||||
export const SELECT_WORKSPACE = () => "Select Workspace";
|
||||
export const FORK_TEMPLATE = () => "FORK TEMPLATE";
|
||||
export const TEMPLATES = () => "TEMPLATES";
|
||||
export const FORK_THIS_TEMPLATE = () => "Fork this template";
|
||||
|
|
@ -1235,9 +1235,9 @@ export const ENTITY_ID_TOOLTIP = () =>
|
|||
"This URL will be used while configuring your Identity Provider's Entity ID URL";
|
||||
|
||||
export const FORK_APP_MODAL_LOADING_TITLE = () =>
|
||||
"Fetching organisations to fork to...";
|
||||
"Fetching workspaces to fork to...";
|
||||
export const FORK_APP_MODAL_EMPTY_TITLE = () =>
|
||||
"No organisation available to fork to";
|
||||
"No workspace available to fork to";
|
||||
export const FORK_APP_MODAL_SUCCESS_TITLE = () =>
|
||||
"Choose where to fork the app";
|
||||
export const FORK = () => `FORK`;
|
||||
|
|
|
|||
|
|
@ -29,7 +29,7 @@ const FormAuth: AdminConfigType = {
|
|||
type: SettingCategories.FORM_AUTH,
|
||||
controlType: SettingTypes.GROUP,
|
||||
title: "Form Login",
|
||||
subText: "Enable your organization to sign in with Appsmith Form.",
|
||||
subText: "Enable your workspace to sign in with Appsmith Form.",
|
||||
canSave: true,
|
||||
isConnected: false,
|
||||
settings: [
|
||||
|
|
@ -69,7 +69,7 @@ const GoogleAuth: AdminConfigType = {
|
|||
type: SettingCategories.GOOGLE_AUTH,
|
||||
controlType: SettingTypes.GROUP,
|
||||
title: "Google Authentication",
|
||||
subText: "Enable your organization to sign in with Google (OAuth).",
|
||||
subText: "Enable your workspace to sign in with Google (OAuth).",
|
||||
canSave: true,
|
||||
isConnected: enableGoogleOAuth,
|
||||
settings: [
|
||||
|
|
@ -116,7 +116,7 @@ const GithubAuth: AdminConfigType = {
|
|||
controlType: SettingTypes.GROUP,
|
||||
title: "Github Authentication",
|
||||
subText:
|
||||
"Enable your organization to sign in with Github SAML single sign-on (SSO).",
|
||||
"Enable your workspace to sign in with Github SAML single sign-on (SSO).",
|
||||
canSave: true,
|
||||
isConnected: enableGithubOAuth,
|
||||
settings: [
|
||||
|
|
@ -153,7 +153,7 @@ export const FormAuthCallout: AuthMethodType = {
|
|||
id: "APPSMITH_FORM_LOGIN_AUTH",
|
||||
category: SettingCategories.FORM_AUTH,
|
||||
label: "Form Login",
|
||||
subText: "Enable your organization to sign in with Appsmith Form.",
|
||||
subText: "Enable your workspace to sign in with Appsmith Form.",
|
||||
image: Lock,
|
||||
type: "LINK",
|
||||
isConnected: !disableLoginForm,
|
||||
|
|
@ -164,7 +164,7 @@ export const GoogleAuthCallout: AuthMethodType = {
|
|||
category: SettingCategories.GOOGLE_AUTH,
|
||||
label: "Google",
|
||||
subText:
|
||||
"Enable your organization to sign in with Google (OAuth 2.0) single sign-on (SSO).",
|
||||
"Enable your workspace to sign in with Google (OAuth 2.0) single sign-on (SSO).",
|
||||
image: Google,
|
||||
type: "LINK",
|
||||
isConnected: enableGoogleOAuth,
|
||||
|
|
@ -175,7 +175,7 @@ export const GithubAuthCallout: AuthMethodType = {
|
|||
category: SettingCategories.GITHUB_AUTH,
|
||||
label: "Github",
|
||||
subText:
|
||||
"Enable your organization to sign in with Github (OAuth 2.0) single sign-on (SSO).",
|
||||
"Enable your workspace to sign in with Github (OAuth 2.0) single sign-on (SSO).",
|
||||
image: Github,
|
||||
type: "LINK",
|
||||
isConnected: enableGithubOAuth,
|
||||
|
|
@ -185,7 +185,7 @@ export const SamlAuthCallout: AuthMethodType = {
|
|||
id: "APPSMITH_SAML_AUTH",
|
||||
category: "saml",
|
||||
label: "SAML 2.0",
|
||||
subText: `Enable your organization to sign in with your preferred SAML2 compliant provider.`,
|
||||
subText: `Enable your workspace to sign in with your preferred SAML2 compliant provider.`,
|
||||
image: SamlSso,
|
||||
needsUpgrade: true,
|
||||
type: "OTHER",
|
||||
|
|
@ -195,7 +195,7 @@ export const OidcAuthCallout: AuthMethodType = {
|
|||
id: "APPSMITH_OIDC_AUTH",
|
||||
category: "oidc",
|
||||
label: "OIDC",
|
||||
subText: `Enable your organization to sign in with Open ID Connect.`,
|
||||
subText: `Enable your workspace to sign in with Open ID Connect.`,
|
||||
image: OIDC,
|
||||
needsUpgrade: true,
|
||||
type: "OTHER",
|
||||
|
|
|
|||
|
|
@ -12,7 +12,7 @@ export const FORGOT_PASSWORD_FORM_NAME = "ForgotPasswordForm";
|
|||
export const RESET_PASSWORD_FORM_NAME = "ResetPasswordForm";
|
||||
export const CREATE_PASSWORD_FORM_NAME = "CreatePasswordForm";
|
||||
|
||||
export const CREATE_WORKSPACE_FORM_NAME = "New Organization";
|
||||
export const CREATE_WORKSPACE_FORM_NAME = "New Workspace";
|
||||
export const CURL_IMPORT_FORM = "CurlImportForm";
|
||||
|
||||
export const QUERY_EDITOR_FORM_NAME = "QueryEditorForm";
|
||||
|
|
|
|||
|
|
@ -9,7 +9,7 @@ describe("generateDataTreeJSAction", () => {
|
|||
config: {
|
||||
id: "1234",
|
||||
applicationId: "app123",
|
||||
workspaceId: "org123",
|
||||
workspaceId: "workspace123",
|
||||
name: "JSObject2",
|
||||
pageId: "page123",
|
||||
pluginId: "plugin123",
|
||||
|
|
@ -20,7 +20,7 @@ describe("generateDataTreeJSAction", () => {
|
|||
{
|
||||
id: "abcd",
|
||||
applicationId: "app123",
|
||||
workspaceId: "org123",
|
||||
workspaceId: "workspace123",
|
||||
pluginType: PluginType.JS,
|
||||
pluginId: "plugin123",
|
||||
name: "myFun2",
|
||||
|
|
@ -29,7 +29,7 @@ describe("generateDataTreeJSAction", () => {
|
|||
userPermissions: [],
|
||||
name: "UNUSED_DATASOURCE",
|
||||
pluginId: "plugin123",
|
||||
workspaceId: "org123",
|
||||
workspaceId: "workspace123",
|
||||
messages: [],
|
||||
isValid: true,
|
||||
new: true,
|
||||
|
|
@ -68,7 +68,7 @@ describe("generateDataTreeJSAction", () => {
|
|||
{
|
||||
id: "623973054d9aea1b062af87b",
|
||||
applicationId: "app123",
|
||||
workspaceId: "org123",
|
||||
workspaceId: "workspace123",
|
||||
pluginType: "JS",
|
||||
pluginId: "plugin123",
|
||||
name: "myFun1",
|
||||
|
|
@ -77,7 +77,7 @@ describe("generateDataTreeJSAction", () => {
|
|||
userPermissions: [],
|
||||
name: "UNUSED_DATASOURCE",
|
||||
pluginId: "plugin123",
|
||||
workspaceId: "org123",
|
||||
workspaceId: "workspace123",
|
||||
messages: [],
|
||||
isValid: true,
|
||||
new: true,
|
||||
|
|
@ -207,7 +207,7 @@ describe("generateDataTreeJSAction", () => {
|
|||
config: {
|
||||
id: "1234",
|
||||
applicationId: "app123",
|
||||
workspaceId: "org123",
|
||||
workspaceId: "workspace123",
|
||||
name: "JSObject2",
|
||||
pageId: "page123",
|
||||
pluginId: "plugin123",
|
||||
|
|
@ -218,7 +218,7 @@ describe("generateDataTreeJSAction", () => {
|
|||
{
|
||||
id: "abcd",
|
||||
applicationId: "app123",
|
||||
workspaceId: "org123",
|
||||
workspaceId: "workspace123",
|
||||
pluginType: PluginType.JS,
|
||||
pluginId: "plugin123",
|
||||
name: "myFun2",
|
||||
|
|
@ -227,7 +227,7 @@ describe("generateDataTreeJSAction", () => {
|
|||
userPermissions: [],
|
||||
name: "UNUSED_DATASOURCE",
|
||||
pluginId: "plugin123",
|
||||
workspaceId: "org123",
|
||||
workspaceId: "workspace123",
|
||||
messages: [],
|
||||
isValid: true,
|
||||
new: true,
|
||||
|
|
@ -266,7 +266,7 @@ describe("generateDataTreeJSAction", () => {
|
|||
{
|
||||
id: "623973054d9aea1b062af87b",
|
||||
applicationId: "app123",
|
||||
workspaceId: "org123",
|
||||
workspaceId: "workspace123",
|
||||
pluginType: "JS",
|
||||
pluginId: "plugin123",
|
||||
name: "myFun1",
|
||||
|
|
@ -275,7 +275,7 @@ describe("generateDataTreeJSAction", () => {
|
|||
userPermissions: [],
|
||||
name: "UNUSED_DATASOURCE",
|
||||
pluginId: "plugin123",
|
||||
workspaceId: "org123",
|
||||
workspaceId: "workspace123",
|
||||
messages: [],
|
||||
isValid: true,
|
||||
new: true,
|
||||
|
|
|
|||
|
|
@ -174,7 +174,7 @@
|
|||
"publish:workspaceApplications",
|
||||
"read:workspaceApplications"
|
||||
],
|
||||
"name":"new org",
|
||||
"name":"new workspace",
|
||||
"email":"b1@appsmith.com",
|
||||
"plugins":[
|
||||
{
|
||||
|
|
@ -274,7 +274,7 @@
|
|||
"new":true
|
||||
}
|
||||
],
|
||||
"slug":"new-org5",
|
||||
"slug":"new-workspace5",
|
||||
"logoUrl":"/api/v1/assets/null",
|
||||
"new":false
|
||||
},
|
||||
|
|
|
|||
|
|
@ -8,7 +8,7 @@
|
|||
"userPermissions":[
|
||||
|
||||
],
|
||||
"name":"new org",
|
||||
"name":"new workspace",
|
||||
"email":"b1@appsmith.com",
|
||||
"plugins":[
|
||||
{
|
||||
|
|
@ -108,7 +108,7 @@
|
|||
"new":true
|
||||
}
|
||||
],
|
||||
"slug":"new-org5",
|
||||
"slug":"new-workspace5",
|
||||
"logoUrl":"/api/v1/assets/null",
|
||||
"new":false
|
||||
}
|
||||
|
|
|
|||
|
|
@ -408,7 +408,7 @@ function LeftPane() {
|
|||
submitCreateWorkspaceForm(
|
||||
{
|
||||
name: getNextEntityName(
|
||||
"Untitled organization ",
|
||||
"Untitled workspace ",
|
||||
fetchedUserWorkspaces.map((el: any) => el.workspace.name),
|
||||
),
|
||||
},
|
||||
|
|
@ -853,7 +853,7 @@ function ApplicationsSection(props: any) {
|
|||
}}
|
||||
text={
|
||||
!warnLeavingWorkspace
|
||||
? "Leave Organization"
|
||||
? "Leave Workspace"
|
||||
: "Are you sure?"
|
||||
}
|
||||
type={!warnLeavingWorkspace ? undefined : "warning"}
|
||||
|
|
@ -870,7 +870,7 @@ function ApplicationsSection(props: any) {
|
|||
}}
|
||||
text={
|
||||
!warnDeleteWorkspace
|
||||
? "Delete Organization"
|
||||
? "Delete Workspace"
|
||||
: "Are you sure?"
|
||||
}
|
||||
type={
|
||||
|
|
@ -902,7 +902,7 @@ function ApplicationsSection(props: any) {
|
|||
{applications.length === 0 && (
|
||||
<NoAppsFound>
|
||||
<NoAppsFoundIcon />
|
||||
<span>There’s nothing inside this organization</span>
|
||||
<span>There’s nothing inside this workspace</span>
|
||||
{/* below component is duplicate. This is because of cypress test were failing */}
|
||||
{!isMobile && (
|
||||
<Button
|
||||
|
|
|
|||
|
|
@ -26,7 +26,7 @@ export const options = (
|
|||
shouldCloseDropdown: false,
|
||||
},
|
||||
{
|
||||
content: "Organization Settings",
|
||||
content: "Workspace Settings",
|
||||
onSelect: () =>
|
||||
getOnSelectAction(DropdownOnSelectActions.REDIRECT, {
|
||||
path: `/workspace/${workspaceId}/settings`,
|
||||
|
|
|
|||
|
|
@ -166,7 +166,7 @@ export function GeneralSettings() {
|
|||
<Row>
|
||||
<Col>
|
||||
<InputLabelWrapper>
|
||||
<Text type={TextType.P1}>Organization Name</Text>
|
||||
<Text type={TextType.P1}>Workspace Name</Text>
|
||||
</InputLabelWrapper>
|
||||
{isFetchingApplications && <Loader className={Classes.SKELETON} />}
|
||||
{!isFetchingApplications && (
|
||||
|
|
@ -175,7 +175,7 @@ export function GeneralSettings() {
|
|||
defaultValue={currentWorkspace && currentWorkspace.name}
|
||||
fill
|
||||
onChange={onWorkspaceNameChange}
|
||||
placeholder="Organization Name"
|
||||
placeholder="Workspace Name"
|
||||
validator={notEmptyValidator}
|
||||
/>
|
||||
)}
|
||||
|
|
|
|||
|
|
@ -14,7 +14,7 @@ describe("Application Settings", () => {
|
|||
it("checks that workspace settings have correct styling", async () => {
|
||||
const { findByText } = render(<GeneralSettings />);
|
||||
|
||||
const workspaceNameField = await findByText("Organization Name");
|
||||
const workspaceNameField = await findByText("Workspace Name");
|
||||
expect(workspaceNameField.closest("div")).toHaveStyle({ width: "150px;" });
|
||||
});
|
||||
afterEach(() => {
|
||||
|
|
|
|||
|
|
@ -10,7 +10,7 @@ export function Workspace() {
|
|||
const { path } = useRouteMatch();
|
||||
const location = useLocation();
|
||||
return (
|
||||
<PageWrapper displayName="Organization Settings">
|
||||
<PageWrapper displayName="Workspace Settings">
|
||||
<Switch location={location}>
|
||||
<SentryRoute
|
||||
component={Settings}
|
||||
|
|
|
|||
|
|
@ -45,7 +45,7 @@ function* fetchPluginsSaga(
|
|||
if (action.payload?.workspaceId) workspaceId = action.payload?.workspaceId;
|
||||
|
||||
if (!workspaceId) {
|
||||
throw Error("Org id does not exist");
|
||||
throw Error("Workspace id does not exist");
|
||||
}
|
||||
const pluginsResponse: ApiResponse<Plugin[]> = yield call(
|
||||
PluginsApi.fetchPlugins,
|
||||
|
|
|
|||
|
|
@ -285,7 +285,7 @@ export function* createWorkspaceSaga(
|
|||
yield call(resolve);
|
||||
}
|
||||
|
||||
// get created worskpace in focus
|
||||
// get created workspace in focus
|
||||
// @ts-expect-error: response is of type unknown
|
||||
const workspaceId = response.data.id;
|
||||
history.push(`${window.location.pathname}#${workspaceId}`);
|
||||
|
|
|
|||
|
|
@ -532,7 +532,7 @@ export function* leaveWorkspaceSaga(
|
|||
type: ReduxActionTypes.GET_ALL_APPLICATION_INIT,
|
||||
});
|
||||
Toaster.show({
|
||||
text: `You have successfully left the organization`,
|
||||
text: `You have successfully left the workspace`,
|
||||
variant: Variant.success,
|
||||
});
|
||||
}
|
||||
|
|
|
|||
|
|
@ -17,12 +17,12 @@ public enum AppsmithError {
|
|||
PAGE_ID_NOT_GIVEN(400, 4004, "Missing page id. Please enter one.", AppsmithErrorAction.DEFAULT, null, ErrorType.ARGUMENT_ERROR, null),
|
||||
DUPLICATE_KEY_USER_ERROR(400, 4005, "{0} already exists. Please use a different {1}", AppsmithErrorAction.DEFAULT, null, ErrorType.BAD_REQUEST, null),
|
||||
PAGE_DOESNT_BELONG_TO_USER_WORKSPACE(400, 4006, "Page {0} does not belong to the current user {1} " +
|
||||
"organization", AppsmithErrorAction.LOG_EXTERNALLY, null, ErrorType.BAD_REQUEST, null),
|
||||
"workspace", AppsmithErrorAction.LOG_EXTERNALLY, null, ErrorType.BAD_REQUEST, null),
|
||||
UNSUPPORTED_OPERATION(400, 4007, "Unsupported operation", AppsmithErrorAction.DEFAULT, null, ErrorType.BAD_REQUEST, null),
|
||||
DEPRECATED_API(400, 4008, "This API has been deprecated, please contact the Appsmith support for more details.", AppsmithErrorAction.DEFAULT, null, ErrorType.BAD_REQUEST, null),
|
||||
USER_DOESNT_BELONG_ANY_WORKSPACE(400, 4009, "User {0} does not belong to any organization",
|
||||
USER_DOESNT_BELONG_ANY_WORKSPACE(400, 4009, "User {0} does not belong to any workspace",
|
||||
AppsmithErrorAction.LOG_EXTERNALLY, null, ErrorType.INTERNAL_ERROR, null),
|
||||
USER_DOESNT_BELONG_TO_WORKSPACE(400, 4010, "User {0} does not belong to an organization with id {1}",
|
||||
USER_DOESNT_BELONG_TO_WORKSPACE(400, 4010, "User {0} does not belong to an workspace with id {1}",
|
||||
AppsmithErrorAction.LOG_EXTERNALLY, null, ErrorType.INTERNAL_ERROR, null),
|
||||
NO_CONFIGURATION_FOUND_IN_DATASOURCE(400, 4011, "No datasource configuration found. Please configure it and try again.",
|
||||
AppsmithErrorAction.DEFAULT, "Datasource configuration is invalid", ErrorType.DATASOURCE_CONFIGURATION_ERROR, null),
|
||||
|
|
@ -53,7 +53,7 @@ public enum AppsmithError {
|
|||
" \"layoutId\" : \"{5}\"," +
|
||||
" \"dynamicBinding\" : {6}",
|
||||
AppsmithErrorAction.LOG_EXTERNALLY, null, ErrorType.BAD_REQUEST, null),
|
||||
USER_ALREADY_EXISTS_IN_WORKSPACE(400, 4021, "The user {0} has already been added to the organization with role {1}. To change the role, please navigate to `Manage Users` page.",
|
||||
USER_ALREADY_EXISTS_IN_WORKSPACE(400, 4021, "The user {0} has already been added to the workspace with role {1}. To change the role, please navigate to `Manage Users` page.",
|
||||
AppsmithErrorAction.DEFAULT, null, ErrorType.BAD_REQUEST, null),
|
||||
UNAUTHORIZED_DOMAIN(401, 4019, "Invalid email domain {0} used for sign in/sign up. Please contact the administrator to configure this domain if this is unexpected.",
|
||||
AppsmithErrorAction.DEFAULT, null, ErrorType.AUTHENTICATION_ERROR, null),
|
||||
|
|
@ -86,7 +86,7 @@ public enum AppsmithError {
|
|||
AppsmithErrorAction.LOG_EXTERNALLY, null, ErrorType.BAD_REQUEST, null),
|
||||
GIT_MERGE_FAILED_REMOTE_CHANGES(406, 4036, "Remote is ahead of local by {0} commits on branch {1}. Please pull remote changes first and try again.", AppsmithErrorAction.DEFAULT, null, ErrorType.GIT_ACTION_EXECUTION_ERROR, ErrorReferenceDocUrl.GIT_UPSTREAM_CHANGES.getDocUrl()),
|
||||
GIT_MERGE_FAILED_LOCAL_CHANGES(406, 4037, "There are uncommitted changes present in your local branch {0}. Please commit them first and try again", AppsmithErrorAction.DEFAULT, null, ErrorType.GIT_ACTION_EXECUTION_ERROR, null),
|
||||
REMOVE_LAST_WORKSPACE_ADMIN_ERROR(400, 4038, "The last admin can not be removed from an organization", AppsmithErrorAction.DEFAULT, null, ErrorType.INTERNAL_ERROR, null),
|
||||
REMOVE_LAST_WORKSPACE_ADMIN_ERROR(400, 4038, "The last admin can not be removed from an workspace", AppsmithErrorAction.DEFAULT, null, ErrorType.INTERNAL_ERROR, null),
|
||||
INVALID_CRUD_PAGE_REQUEST(400, 4039, "Unable to process page generation request, {0}", AppsmithErrorAction.DEFAULT, null, ErrorType.BAD_REQUEST, null),
|
||||
UNSUPPORTED_OPERATION_FOR_REMOTE_BRANCH(400, 4040, "This operation is not supported for remote branch {0}. Please use local branches only to proceed", AppsmithErrorAction.DEFAULT, "Unsupported Operation!", ErrorType.BAD_REQUEST, null),
|
||||
INTERNAL_SERVER_ERROR(500, 5000, "Internal server error while processing request", AppsmithErrorAction.LOG_EXTERNALLY, null, ErrorType.INTERNAL_ERROR, null),
|
||||
|
|
@ -105,7 +105,7 @@ public enum AppsmithError {
|
|||
AppsmithErrorAction.DEFAULT, null, ErrorType.CONNECTIVITY_ERROR, null),
|
||||
DATASOURCE_HAS_ACTIONS(409, 4030, "Cannot delete datasource since it has {0} action(s) using it.",
|
||||
AppsmithErrorAction.DEFAULT, null, ErrorType.BAD_REQUEST, null),
|
||||
WORKSPACE_ID_NOT_GIVEN(400, 4031, "Missing organization id. Please enter one.", AppsmithErrorAction.DEFAULT, null, ErrorType.ARGUMENT_ERROR, null),
|
||||
WORKSPACE_ID_NOT_GIVEN(400, 4031, "Missing workspace id. Please enter one.", AppsmithErrorAction.DEFAULT, null, ErrorType.ARGUMENT_ERROR, null),
|
||||
INVALID_CURL_METHOD(400, 4032, "Invalid method in cURL command: {0}.", AppsmithErrorAction.DEFAULT, null, ErrorType.ARGUMENT_ERROR, null),
|
||||
OAUTH_NOT_AVAILABLE(500, 5006, "Login with {0} is not supported.", AppsmithErrorAction.LOG_EXTERNALLY, null, ErrorType.BAD_REQUEST, null),
|
||||
MARKETPLACE_NOT_CONFIGURED(500, 5007, "Marketplace is not configured.", AppsmithErrorAction.DEFAULT, null, ErrorType.CONFIGURATION_ERROR, null),
|
||||
|
|
@ -126,7 +126,7 @@ public enum AppsmithError {
|
|||
INVALID_JS_ACTION(400, 4040, "Something went wrong while trying to parse this action. Please check the JS object for errors.", AppsmithErrorAction.DEFAULT, null, ErrorType.BAD_REQUEST, null),
|
||||
CYCLICAL_DEPENDENCY_ERROR(400, 4041, "Cyclical dependency error encountered while parsing relationship [{0}] where the relationship is denoted as (source : target).", AppsmithErrorAction.DEFAULT, "Cyclical Dependency in Page Load Actions", ErrorType.CONFIGURATION_ERROR, null),
|
||||
CLOUD_SERVICES_ERROR(500, 5012, "Received error from cloud services {0}", AppsmithErrorAction.DEFAULT, null, ErrorType.INTERNAL_ERROR, null),
|
||||
GIT_APPLICATION_LIMIT_ERROR(402, 4043, "You have reached the maximum number of private git repo counts which can be connected to the organization. Please reach out to Appsmith support to opt for commercial plan.", AppsmithErrorAction.DEFAULT, null, ErrorType.EE_FEATURE_ERROR, null),
|
||||
GIT_APPLICATION_LIMIT_ERROR(402, 4043, "You have reached the maximum number of private git repo counts which can be connected to the workspace. Please reach out to Appsmith support to opt for commercial plan.", AppsmithErrorAction.DEFAULT, null, ErrorType.EE_FEATURE_ERROR, null),
|
||||
GIT_ACTION_FAILED(400, 4044, "git {0} failed. \nDetails: {1}", AppsmithErrorAction.DEFAULT, null, ErrorType.GIT_ACTION_EXECUTION_ERROR, null),
|
||||
GIT_FILE_SYSTEM_ERROR(503, 5013, "Error while accessing the file system. {0}", AppsmithErrorAction.DEFAULT, null, ErrorType.GIT_CONFIGURATION_ERROR, ErrorReferenceDocUrl.FILE_PATH_NOT_SET.getDocUrl()),
|
||||
GIT_EXECUTION_TIMEOUT(504, 5014, "Git command execution exceeded the maximum allowed time, please contact Appsmith support for more details", AppsmithErrorAction.DEFAULT, null, ErrorType.CONNECTIVITY_ERROR, null),
|
||||
|
|
@ -136,7 +136,7 @@ public enum AppsmithError {
|
|||
SSH_KEY_GENERATION_ERROR(500, 5015, "Failed to generate SSH keys, please contact Appsmith support for more details", AppsmithErrorAction.DEFAULT, null, ErrorType.GIT_CONFIGURATION_ERROR, null),
|
||||
GIT_GENERIC_ERROR(504, 5016, "Git command execution error: {0}", AppsmithErrorAction.DEFAULT, null, ErrorType.GIT_ACTION_EXECUTION_ERROR, null),
|
||||
GIT_UPSTREAM_CHANGES(400, 4048, "Looks like there are pending upstream changes. To prevent you from losing history, we will pull the changes and push them to your repo.", AppsmithErrorAction.DEFAULT, null, ErrorType.GIT_UPSTREAM_CHANGES_PUSH_EXECUTION_ERROR, ErrorReferenceDocUrl.GIT_UPSTREAM_CHANGES.getDocUrl()),
|
||||
GENERIC_JSON_IMPORT_ERROR(400, 4049, "Unable to import application in organization {0} with error {1}", AppsmithErrorAction.DEFAULT, null, ErrorType.BAD_REQUEST, null),
|
||||
GENERIC_JSON_IMPORT_ERROR(400, 4049, "Unable to import application in workspace {0} with error {1}", AppsmithErrorAction.DEFAULT, null, ErrorType.BAD_REQUEST, null),
|
||||
FILE_PART_DATA_BUFFER_ERROR(500, 5017, "Failed to upload file with error: {0}", AppsmithErrorAction.DEFAULT, null, ErrorType.BAD_REQUEST, null),
|
||||
MIGRATION_ERROR(500, 5018, "This action is already migrated", AppsmithErrorAction.DEFAULT, null, ErrorType.INTERNAL_ERROR, null),
|
||||
INVALID_GIT_SSH_URL(400, 4050, "Please enter valid SSH URL of your repository", AppsmithErrorAction.DEFAULT, null, ErrorType.GIT_CONFIGURATION_ERROR, null),
|
||||
|
|
|
|||
|
|
@ -49,7 +49,7 @@
|
|||
"actionCollectionWithAction": {
|
||||
"id": "testCollectionId",
|
||||
"applicationId": "testApplicationId",
|
||||
"workspaceId": "testOrganizationId",
|
||||
"workspaceId": "testWorkspaceId",
|
||||
"unpublishedCollection": {
|
||||
"name": "testCollection",
|
||||
"pageId": "testPageId",
|
||||
|
|
@ -85,7 +85,7 @@
|
|||
"actionCollectionDTOWithModifiedActions": {
|
||||
"id": "testCollectionId",
|
||||
"applicationId": "testApplicationId",
|
||||
"workspaceId": "testOrganizationId",
|
||||
"workspaceId": "testWorkspaceId",
|
||||
"name": "testCollection",
|
||||
"pageId": "testPageId",
|
||||
"pluginId": "testPluginId",
|
||||
|
|
@ -119,10 +119,10 @@
|
|||
"actionCollectionAfterModifiedActions": {
|
||||
"id": "testCollectionId",
|
||||
"applicationId": "testApplicationId",
|
||||
"workspaceId": "testOrganizationId",
|
||||
"workspaceId": "testWorkspaceId",
|
||||
"unpublishedCollection": {
|
||||
"id": "testCollectionId",
|
||||
"workspaceId": "testOrganizationId",
|
||||
"workspaceId": "testWorkspaceId",
|
||||
"name": "testCollection",
|
||||
"pageId": "testPageId",
|
||||
"pluginId": "testPluginId",
|
||||
|
|
|
|||
|
|
@ -2,22 +2,22 @@
|
|||
|
||||
1. Create a super user (with email <superuser_acl@appsmith.com>), using the sign-up API.
|
||||
|
||||
2. Add `manage` and `read` permissions for `organizations`, `applications`, `pages` and `actions` for this super user,
|
||||
on ALL existing documents (in corresponding collections). Once this is done, the policies field of organizations,
|
||||
2. Add `manage` and `read` permissions for `workspaces`, `applications`, `pages` and `actions` for this super user,
|
||||
on ALL existing documents (in corresponding collections). Once this is done, the policies field of workspaces,
|
||||
for example, should look something like:
|
||||
|
||||
```json
|
||||
{
|
||||
"policies": [
|
||||
{
|
||||
"permission" : "manage:organizations",
|
||||
"permission" : "manage:workspaces",
|
||||
"users" : [
|
||||
"superuser_acl@appsmith.com"
|
||||
],
|
||||
"groups" : []
|
||||
},
|
||||
{
|
||||
"permission" : "read:organizations",
|
||||
"permission" : "read:workspaces",
|
||||
"users" : [
|
||||
"superuser_acl@appsmith.com"
|
||||
],
|
||||
|
|
@ -29,10 +29,10 @@
|
|||
|
||||
3. Disable emails for invite API actions.
|
||||
|
||||
4. For each user, for each organization in the user's `organizationIds` list, hit the invite user API for that
|
||||
organization, using session of the super user.
|
||||
4. For each user, for each workspace in the user's `workspaceIds` list, hit the invite user API for that
|
||||
workspace, using session of the super user.
|
||||
|
||||
5. Remove super user from the organization policies, without disturbing other permission values.
|
||||
5. Remove super user from the workspace policies, without disturbing other permission values.
|
||||
|
||||
6. Remove super user from users collection.
|
||||
|
||||
|
|
|
|||
|
|
@ -8,7 +8,7 @@ You can use the applications for yourself following the simple steps below:
|
|||
2. On the top right-hand corner, you will see an option to `fork` the application
|
||||
4. Click on `fork` application
|
||||
5. Log in to Appsmith, if not already
|
||||
6. Select the organization to which the application should be forked
|
||||
6. Select the workspace to which the application should be forked
|
||||
7. Change datasource credentials to connect to your backend
|
||||
8. You now have a fully functional app to use or build on top of
|
||||
|
||||
|
|
|
|||
|
|
@ -122,7 +122,7 @@ To log in to the Appsmith dashboard, follow these steps:
|
|||
- Go to the Sign Up page, fill in your user's email & password, then click Sign Up
|
||||

|
||||
|
||||
Once you completed the registration, you will be moved to the Personal Organization page. Now you can begin to create your custom app.
|
||||
Once you completed the registration, you will be moved to the Personal Workspace page. Now you can begin to create your custom app.
|
||||

|
||||
|
||||
For more tutorials on how to create your custom app by Appsmith, please take a look at [https://docs.appsmith.com/](https://docs.appsmith.com/)
|
||||
|
|
|
|||
|
|
@ -25,7 +25,7 @@ let res = [
|
|||
"_id" : ObjectId("5df8c225078d501fc3f45361"),
|
||||
"name" : "Admin",
|
||||
"displayName" : "Admin",
|
||||
"workspaceId" : "default-org",
|
||||
"workspaceId" : "default-workspace",
|
||||
"permissions" : [
|
||||
"read:groups",
|
||||
"read:workspaces",
|
||||
|
|
@ -92,7 +92,7 @@ let res = [
|
|||
"_id" : ObjectId("5df8c1fa078d501fc3f44d41"),
|
||||
"name" : "Member",
|
||||
"displayName" : "Member",
|
||||
"workspaceId" : "default-org",
|
||||
"workspaceId" : "default-workspace",
|
||||
"permissions" : [
|
||||
"read:groups",
|
||||
"read:workspaces",
|
||||
|
|
@ -158,7 +158,7 @@ let res = [
|
|||
"_id" : ObjectId("5df8c1e0078d501fc3f4491b"),
|
||||
"name" : "Owner",
|
||||
"displayName" : "Owner",
|
||||
"workspaceId" : "default-org",
|
||||
"workspaceId" : "default-workspace",
|
||||
"permissions" : [
|
||||
"read:groups",
|
||||
"read:workspaces",
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user