mirror of https://github.com/grafana/grafana
UserAdmin: Inform about enterprise user features (#106632)
* UserAdmin: Inform about enterprise user features * Update * Update * Update * Update * Update * New design * Update * Update * Update * Update * Update link * fix import * refactor to brand badge to component * Update * Update * Update * Update * Update linkspull/107156/head
parent
5a8a04cb25
commit
ceee0b9c12
@ -0,0 +1,117 @@ |
||||
import { css } from '@emotion/css'; |
||||
import { useState } from 'react'; |
||||
|
||||
import { GrafanaTheme2 } from '@grafana/data'; |
||||
import { GrafanaEdition } from '@grafana/data/internal'; |
||||
import { t, Trans } from '@grafana/i18n'; |
||||
import { config } from '@grafana/runtime'; |
||||
import { Text, Stack, useStyles2, Button, LinkButton } from '@grafana/ui'; |
||||
import { CloudEnterpriseBadge } from 'app/core/components/Branding/CloudEnterpriseBadge'; |
||||
import { contextSrv } from 'app/core/core'; |
||||
import { backendSrv } from 'app/core/services/backend_srv'; |
||||
|
||||
export interface Props { |
||||
page?: 'teams' | 'users'; |
||||
} |
||||
|
||||
export function EnterpriseAuthFeaturesCard({ page }: Props) { |
||||
const styles = useStyles2(getStyles); |
||||
const helpFlags = contextSrv.user.helpFlags1; |
||||
const HELP_FLAG_ENTERPRISE_AUTH = 0x0004; |
||||
const [isDismissed, setDismissed] = useState<boolean>(Boolean(helpFlags & HELP_FLAG_ENTERPRISE_AUTH)); |
||||
|
||||
const onDismiss = () => { |
||||
backendSrv |
||||
.put(`/api/user/helpflags/${HELP_FLAG_ENTERPRISE_AUTH}`, undefined, { showSuccessAlert: false }) |
||||
.then((res) => { |
||||
contextSrv.user.helpFlags1 = res.helpFlags1; |
||||
setDismissed(true); |
||||
}); |
||||
}; |
||||
|
||||
// This card is only visible in oss
|
||||
if (isDismissed || !isOpenSourceBuildOrUnlicenced()) { |
||||
return null; |
||||
} |
||||
|
||||
return ( |
||||
<div className={styles.box}> |
||||
<Stack direction="row" alignItems="center" justifyContent={'space-between'}> |
||||
<CloudEnterpriseBadge /> |
||||
<Button |
||||
variant="secondary" |
||||
fill="text" |
||||
icon="times" |
||||
onClick={onDismiss} |
||||
aria-label={t('admin.enterprise-auth-features-card.dismiss', 'Dismiss')} |
||||
/> |
||||
</Stack> |
||||
<Stack direction="column" gap={0.5}> |
||||
<Text variant="h4"> |
||||
<Trans i18nKey="admin.enterprise-auth-features-card.heading">Enterprise authentication</Trans> |
||||
</Text> |
||||
<Text variant="body" color="secondary"> |
||||
<Trans i18nKey="admin.enterprise-auth-features-card.text"> |
||||
Manage users, teams, and permissions automatically with <strong>SAML</strong>, <strong>SCIM</strong>,{' '} |
||||
<strong>LDAP</strong>, and <strong>RBAC</strong> — available in Grafana Cloud and Enterprise. |
||||
</Trans> |
||||
</Text> |
||||
</Stack> |
||||
<div> |
||||
<LinkButton |
||||
href={`https://grafana.com/auth/sign-up/create-user?cloud-auth=&redirectPath=cloud-auth&utm_source=oss-grafana&cnt-admin-${page}`} |
||||
icon="external-link-alt" |
||||
variant="secondary" |
||||
target="_blank" |
||||
rel="noopener noreferrer" |
||||
> |
||||
<Trans i18nKey="admin.enterprise-auth-features-card.learn-more-link">Learn more</Trans> |
||||
</LinkButton> |
||||
</div> |
||||
</div> |
||||
); |
||||
} |
||||
|
||||
function getStyles(theme: GrafanaTheme2) { |
||||
return { |
||||
cloudBadge: css({ |
||||
display: 'flex', |
||||
alignItems: 'center', |
||||
background: theme.colors.gradients.brandHorizontal, |
||||
color: theme.colors.primary.contrastText, |
||||
padding: theme.spacing(0.5, 1), |
||||
borderRadius: theme.shape.radius.pill, |
||||
fontSize: theme.typography.bodySmall.fontSize, |
||||
gap: theme.spacing(1), |
||||
}), |
||||
box: css({ |
||||
padding: theme.spacing(3), |
||||
border: `1px solid ${theme.colors.border.weak}`, |
||||
backgroundColor: theme.colors.background.secondary, |
||||
display: 'flex', |
||||
flexDirection: 'column', |
||||
gap: theme.spacing(1.5), |
||||
borderRadius: theme.shape.radius.default, |
||||
marginTop: theme.spacing(3), |
||||
strong: { |
||||
color: theme.colors.text.primary, |
||||
}, |
||||
}), |
||||
icon: css({ |
||||
position: 'relative', |
||||
top: -1, |
||||
}), |
||||
}; |
||||
} |
||||
|
||||
export function isOpenSourceBuildOrUnlicenced() { |
||||
if (config.buildInfo.edition === GrafanaEdition.OpenSource) { |
||||
return true; |
||||
} |
||||
|
||||
if (config.licenseInfo.stateInfo !== 'Licensed') { |
||||
return true; |
||||
} |
||||
|
||||
return false; |
||||
} |
Loading…
Reference in new issue