Skip to content

Commit

Permalink
Hotfixes (#220)
Browse files Browse the repository at this point in the history
* #218: updated site map in README file

* #218: reversed project related UI to the version that Facility Operator has full project access

* #218: added project personnel count to the po/pm table

* #218: updated README file diagrams and text

* #218: fixed typo/ grammer issue in README file
  • Loading branch information
yaxue1123 authored Sep 14, 2022
1 parent 6a3fb39 commit 0635f5a
Show file tree
Hide file tree
Showing 4 changed files with 36 additions and 37 deletions.
37 changes: 17 additions & 20 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,37 +1,34 @@
# FABRIC Portal

The portal is a web based reflection of the user's rights and project associations within [FABRIC](https://fabric-testbed.net//0). From the portal the user can view projects, resources and other tooling that they have rights to interact with as deemed by project membership. The portal relies on the information it receives from [CILogon](https://www.cilogon.org/home)/[COmanage](https://www.cilogon.org/comanage) and from the System Services to determine what the user sees or has access to.
FABRIC Portal is a web based reflection of the user's rights and project associations within [FABRIC](https://fabric-testbed.net//0). From Portal the user can view projects, resources and other tooling that they have rights to interact with as deemed by project membership. Portal relies on the information it receives from [CILogon](https://www.cilogon.org/home)/[COmanage](https://www.cilogon.org/comanage) and from the System Services to determine what the user sees or has access to.

## Overview

![FABRIC Portal Site Map - Version 2](https://user-images.githubusercontent.com/37635744/134710001-610fa508-acc4-4732-a559-a8c24a584e09.png)
![FABRIC Portal Site Map - v3](https://user-images.githubusercontent.com/37635744/189714906-18677104-0070-4f93-97a9-746975193a96.png)

The portal provides a graphical user interface to many testbed functions. Those include:
Portal provides a graphical user interface to many testbed functions:

- **User Profile Page**: users view their account information such as name, email, CILogon ID (Identity attributes are populated into the profile from CI Logon and are considered immutable) on the user profile page. Global roles and project roles are shown in tables as well as the ability of refreshing roles and requesting roles. Users have access to their stored ssh public keys and are able to view, search and download keys.
- **Credential Management**: the Portal calls Credential Manager API to provide a graphical interface for creating/ refreshing/ revoking credential tokens to use tools.
- **Project Management**: by interfacing with Project Registry API, the portal allows users to
- Manage roles of other users
- Manage projects - e.g. create projects, edit project metadata, manage project memberships, request to be added or removed from projects
- **Resource Discovery**: shows testbed resource availability summary in table; presents site resource availability in both resource map visualization and data table.
- **Experiment Profile Management**: each FABRIC experiment is launched using a profile that describes the topology and configuration of the experiment slice and the configuration of the measurement resources. A profile can be private or public based on users’ choices. The portal provides users a list of available public profiles, allows them to create new profiles and selectively share their profile with others. Public profiles can be cloned and modified by users to customize to their needs.
- **Launch and Run Experiments**: by interfacing with the control framework the portal allows experiments to be graphically defined and launched using an experiment profile. The portal provides a list of publicly available experiment profiles as well as private profiles belonging to an individual project. The portal allows users to interact with provisioned resources, collect measurement information (by interacting with the measurement framework) from the experiment.
- Possible extensions: ability to cite experiment profiles via a persistent URL and/or a and show the scholarly communication via data visualization of the experiment profile citation relationship like node-link network diagrams.
- **Links**: The portal provides links to the Knowledge Base site and JupyterHub.
- **User Profile Page**: users view their account information such as name, email, CILogon ID (Identity attributes are populated into the profile from CI Logon and are considered immutable) on the user profile page. Global roles and project roles are shown in tables as well as the ability of refreshing roles and requesting roles. Users have access to their stored SSH public keys and are able to view, search and download keys. Users can edit bio, pronouns, job title and personal website in this page.
- **Project Management**: by interfacing with the FABRIC Core API, Portal allows users to manage projects based on their roles, including the ability to create projects, edit project metadata, edit project permissions and manage project memberships.
- **Resource Discovery**: Resources page shows testbed resource availability summary in table; presents site resource availability in both resource map visualization and data table (and will provide more visualized representation of resources soon).
- **Credential Management**: Portal provides a link to the Credential Manager app, which requires login authentication and provides a graphical interface for creating/ refreshing and revoking credential tokens.
- **SSH Key Management**: Portal supports SSH key management functions to view/ generate/ upload or delete sliver/ bastion keys.
- **Slice Builder**: Portal includes a graphical Slice Builder that allows experimenters to graphically define their experiment slice topology with provisionable resources. The features to download and upload slice as a JSON-format file are under development.
- **Slice Viewer**: Portal includes a graphical Slice Viewer that helps you display your slice including slice information and topology. The features to modify and renew slice are under development.
- **Links**: Portal provides links to the Knowledge Base site and JupyterHub. Knowledge Base site provides documentation and user guide to various FABRIC tools and services, also includes a forum for FABRIC announcements and users to discuss and ask questions.

![FABRIC Portal - portal design v4](https://user-images.githubusercontent.com/37635744/134709211-2a56d05b-db4c-496f-8bef-9cb3face78a8.png)
![FABRIC Portal - portal design v5](https://user-images.githubusercontent.com/37635744/190232916-e655e917-145b-46ff-b5fd-a5c8ea174de0.png)

FABRIC System Services and Portal consist of multiple components:

- **Portal**: presents the graphic interface to users and interacts with other components;
- **Project Registry**: manages and maintains projects and their memberships;
- **Credential Manager**: issues credentials for users to utilize the testbed resources via Control Framework APIs;
- **Experiment Profile Manager**: stores and allows to share experiment profile definitions;
- **User Information Service**: manages information/attributes about the users that are not stored in CI Logon - e.g. SSH keys, alternative identifiers (e.g. Orcid, Web-of-science etc) and any social aspects related to user identity;
- **FABRIC Core API**: Previously separated back-end services of Project Registry API and User Information Services have been coalesced into this FABRIC Core API service. The service provides access to FABRIC People/ Project and SSH Key management and is enhanced to support a richer set of options related to customizing information about projects and people shown through the Portal.
- **Orchestrator API**: provides endpoints for slice and sliver management,also for listing and description of available resources of sites across the FABRIC testbed.
- **CI Logon/COmanage Instance**: provides federated authentication, also provides identity attributes to other components for authorization decisions;
- **SSH Proxy Service**: allows browser-based SSH logins into slivers via Portal;
- **SSH Proxy Service**: allows browser-based SSH logins into slivers via Portal (not implemented yet);
- **Knowledge Base**: contains user support documentation, allows users to ask questions and discuss about the testbed, provide feedback to operators etc;
- **JupyterHub**: provides on-demand notebooks for experimenters.
- **JupyterHub**: provides on-demand notebooks for experimenters;
- **Credential Manager API/ App**: issues credentials for users to utilize the testbed resources via Control Framework APIs.

## Environment and Configuration

Expand Down
15 changes: 10 additions & 5 deletions src/components/Project/ProjectPersonnel.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -108,11 +108,16 @@ class ProjectPersonnel extends Component {
}
{
users.length > 0 &&
<ProjectUserTable
users={users}
onDelete={this.handleDeleteUser}
canUpdate={canUpdate}
/>
<div>
<div className="d-flex flex-row-reverse mb-2">
{`${users.length} ${personnelType}`}.
</div>
<ProjectUserTable
users={users}
onDelete={this.handleDeleteUser}
canUpdate={canUpdate}
/>
</div>
}
{
users.length === 0 && !canUpdate &&
Expand Down
18 changes: 8 additions & 10 deletions src/pages/ProjectForm.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -161,10 +161,9 @@ class projectForm extends Form {

const { data: project, globalRoles } = this.state;
try {
await updateProject(project);
if (globalRoles.isFacilityOperator) {
await updateTags(project.uuid, project.tags);
} else {
await updateProject(project);
}

this.setState({ showSpinner: false, spinnerText: "" });
Expand Down Expand Up @@ -290,7 +289,6 @@ class projectForm extends Form {
} = this.state;

let canUpdate = globalRoles.isFacilityOperator || data.is_creator || data.is_owner;
let canUpdateAttr = data.is_creator || data.is_owner;

const parsedTags = this.parseTags();
const urlSuffix = `email=${user.email}&customfield_10058=${data.uuid}&customfield_10059=${encodeURIComponent(data.name)}`;
Expand Down Expand Up @@ -383,17 +381,17 @@ class projectForm extends Form {
className={`${activeIndex !== 0 ? "d-none" : "col-9"}`}
>
<form onSubmit={this.handleSubmit}>
{this.renderInput("name", "Name", canUpdateAttr)}
{this.renderTextarea("description", "Description", canUpdateAttr)}
{this.renderSelect("facility", "Facility", canUpdateAttr, data.facility, portalData.facilityOptions)}
{this.renderSelect("is_public", "Public", canUpdateAttr, "", publicOptions)}
{this.renderInput("name", "Name", canUpdate)}
{this.renderTextarea("description", "Description", canUpdate)}
{this.renderSelect("facility", "Facility", canUpdate, data.facility, portalData.facilityOptions)}
{this.renderSelect("is_public", "Public", canUpdate, "", publicOptions)}
{globalRoles.isFacilityOperator && this.renderProjectTags("tags", "Project Permissions", parsedTags.baseOptions, parsedTags.optionsMapping)}
{canUpdate && this.renderButton("Save")}
</form>
{
<ProjectBasicInfoTable
project={data}
canUpdate={canUpdateAttr}
canUpdate={canUpdate}
onDeleteProject={this.handleDeleteProject}
/>
}
Expand All @@ -408,7 +406,7 @@ class projectForm extends Form {
<div className="w-100">
<ProjectPersonnel
personnelType={"Project Owners"}
canUpdate={canUpdateAttr}
canUpdate={canUpdate}
users={owners}
onSinglePersonnelUpdate={this.handleSinglePersonnelUpdate}
onPersonnelUpdate={this.handlePersonnelUpdate}
Expand All @@ -425,7 +423,7 @@ class projectForm extends Form {
<div className="w-100">
<ProjectPersonnel
personnelType={"Project Members"}
canUpdate={canUpdateAttr}
canUpdate={canUpdate}
users={members}
onSinglePersonnelUpdate={this.handleSinglePersonnelUpdate}
onPersonnelUpdate={this.handlePersonnelUpdate}
Expand Down
3 changes: 1 addition & 2 deletions src/pages/Projects.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -143,8 +143,7 @@ class Projects extends React.Component {
</a>
</div>
{
// (globalRoles.isFacilityOperator || globalRoles.isProjectLead) &&
globalRoles.isProjectLead &&
(globalRoles.isFacilityOperator || globalRoles.isProjectLead) &&
<Link to="/projects/new" className="btn btn-primary create-project-btn my-2">
Create Project
</Link>
Expand Down

0 comments on commit 0635f5a

Please sign in to comment.