diff --git a/frontend/src/components/common/account.js b/frontend/src/components/common/account.js
index 065bf1ee63..cf90c67752 100644
--- a/frontend/src/components/common/account.js
+++ b/frontend/src/components/common/account.js
@@ -77,6 +77,7 @@ class Account extends Component {
quotaUsage: Utils.bytesToSize(resp.data.usage),
quotaTotal: Utils.bytesToSize(resp.data.total),
isStaff: resp.data.is_staff,
+ isInstAdmin: resp.data.is_inst_admin,
isOrgStaff: resp.data.is_org_staff === 1 ? true : false,
showInfo: !this.state.showInfo,
});
@@ -91,29 +92,47 @@ class Account extends Component {
}
renderMenu = () => {
- if (this.state.isStaff && this.props.isAdminPanel) {
- return (
- {gettext('Exit Admin Panel')}
- );
+ let data;
+ const { isStaff, isOrgStaff, isInstAdmin } = this.state;
+
+ if (this.props.isAdminPanel) {
+ if (isStaff) {
+ data = {
+ url: siteRoot,
+ text: gettext('Exit System Admin')
+ };
+ } else if (isOrgStaff) {
+ data = {
+ url: siteRoot,
+ text: gettext('Exit Organization Admin')
+ };
+ } else if (isInstAdmin) {
+ data = {
+ url: siteRoot,
+ text: gettext('Exit Institution Admin')
+ };
+ }
+
+ } else {
+ if (isStaff) {
+ data = {
+ url: `${siteRoot}sys/useradmin/`,
+ text: gettext('System Admin')
+ };
+ } else if (isOrgStaff) {
+ data = {
+ url: `${siteRoot}org/useradmin/`,
+ text: gettext('Organization Admin')
+ };
+ } else if (isInstAdmin) {
+ data = {
+ url: `${siteRoot}inst/useradmin/`,
+ text: gettext('Institution Admin')
+ };
+ }
}
- if (this.state.isOrgStaff && this.props.isAdminPanel) {
- return (
- {gettext('Exit Organization Admin')}
- );
- }
-
- if (this.state.isStaff) {
- return (
- {gettext('System Admin')}
- );
- }
-
- if (this.state.isOrgStaff) {
- return (
- {gettext('Organization Admin')}
- );
- }
+ return data && {data.text};
}
renderAvatar = () => {
diff --git a/seahub/api2/views.py b/seahub/api2/views.py
index 7d5ab86e79..2ec69fcbea 100644
--- a/seahub/api2/views.py
+++ b/seahub/api2/views.py
@@ -329,6 +329,9 @@ class AccountInfo(APIView):
info['institution'] = p.institution if p and p.institution else ""
info['is_staff'] = request.user.is_staff
+ if getattr(settings, 'MULTI_INSTITUTION', False):
+ info['is_inst_admin'] = request.user.inst_admin
+
interval = UserOptions.objects.get_file_updates_email_interval(email)
info['email_notification_interval'] = 0 if interval is None else interval
return info
diff --git a/seahub/institutions/middleware.py b/seahub/institutions/middleware.py
index 6a609e6f46..b00c76c71a 100644
--- a/seahub/institutions/middleware.py
+++ b/seahub/institutions/middleware.py
@@ -16,6 +16,7 @@ class InstitutionMiddleware(object):
try:
inst_admin = InstitutionAdmin.objects.get(user=username)
except InstitutionAdmin.DoesNotExist:
+ request.user.inst_admin = False
return None
request.user.institution = inst_admin.institution