| | |
| | | const AuthProvider = { |
| | | // login |
| | | login: async ({ username, password, tenantId }) => { |
| | | const { accessToken, user } = await login({ |
| | | const { accessToken, user, tenant } = await login({ |
| | | username: username, |
| | | password: password, |
| | | tenantId: tenantId, |
| | |
| | | avatar: avatar, |
| | | fullName: user.nickname, |
| | | id: user.id, |
| | | username: user.username |
| | | username: user.username, |
| | | tenant: tenant, |
| | | } |
| | | setToken(accessToken); |
| | | localStorage.setItem("user", JSON.stringify(userToPersist)); |
| | |
| | | import { LoadingIndicator, LocalesMenuButton } from 'react-admin'; |
| | | |
| | | import { ThemeSwapper } from '../themes/ThemeSwapper'; |
| | | import { TenantTip } from './TenantTip'; |
| | | |
| | | export const AppBarToolbar = () => ( |
| | | <> |
| | | <LocalesMenuButton /> |
| | | <ThemeSwapper /> |
| | | <LoadingIndicator /> |
| | | <TenantTip /> |
| | | </> |
| | | ); |
New file |
| | |
| | | import React, { useState, useRef, useEffect, useMemo } from "react"; |
| | | import { useGetIdentity } from 'react-admin'; |
| | | import { Stack, Grid, Box, Typography, Chip, useTheme } from '@mui/material'; |
| | | import GroupIcon from '@mui/icons-material/Group'; |
| | | |
| | | export const TenantTip = (props) => { |
| | | const { identity, isLoading, error } = useGetIdentity(); |
| | | |
| | | return ( |
| | | <> |
| | | <Box sx={{ |
| | | mr: 1, |
| | | ml: 2, |
| | | }}> |
| | | <Chip |
| | | icon={<GroupIcon />} |
| | | label={identity?.tenant ?? 'Unknown'} |
| | | variant="outlined" |
| | | sx={{ |
| | | borderRadius: '10px', |
| | | cursor: 'pointer', |
| | | paddingLeft: "0.3rem", |
| | | }} |
| | | /> |
| | | </Box> |
| | | </> |
| | | ) |
| | | } |
| | |
| | | onChange={(event, newValue) => { |
| | | setValue(newValue); |
| | | }} |
| | | indicatorColor="secondary" |
| | | indicatorColor="primary" |
| | | textColor="inherit" |
| | | TabIndicatorProps={{ |
| | | style: { |
| | | left: 0, |
| | | right: 'auto', |
| | | width: '5px', |
| | | borderRadius: '2px', |
| | | opacity: .8, |
| | | } |
| | | }} |
| | | sx={{ |
| | | borderRight: 1, |
| | | borderColor: 'divider', |
| | |
| | | elevation: 1, |
| | | }, |
| | | }, |
| | | MuiChip: { |
| | | styleOverrides: { |
| | | outlined: { |
| | | '.MuiAppBar-root &': { |
| | | color: '#ffffff', |
| | | borderColor: '#ffffff', |
| | | '& .MuiChip-icon': { |
| | | color: '#ffffff', |
| | | }, |
| | | }, |
| | | }, |
| | | }, |
| | | }, |
| | | // MuiLinearProgress: { |
| | | // styleOverrides: { |
| | | // colorPrimary: { |
| | |
| | | import { rcsLightTheme, rcsDarkTheme } from './rcsTheme'; |
| | | |
| | | export const themes = [ |
| | | { name: 'rcs', light: rcsLightTheme, dark: rcsDarkTheme }, |
| | | { name: 'default', light: rcsLightTheme, dark: rcsDarkTheme }, |
| | | { name: 'soft', light: softLightTheme, dark: softDarkTheme }, |
| | | { name: 'default', light: defaultLightTheme, dark: defaultDarkTheme }, |
| | | // { name: 'default', light: defaultLightTheme, dark: defaultDarkTheme }, |
| | | { name: 'nano', light: nanoLightTheme, dark: nanoDarkTheme }, |
| | | { name: 'radiant', light: radiantLightTheme, dark: radiantDarkTheme }, |
| | | { name: 'house', light: houseLightTheme, dark: houseDarkTheme }, |
| | | { name: 'chiptune', light: chiptuneTheme }, |
| | | // { name: 'radiant', light: radiantLightTheme, dark: radiantDarkTheme }, |
| | | // { name: 'house', light: houseLightTheme, dark: houseDarkTheme }, |
| | | // { name: 'chiptune', light: chiptuneTheme }, |
| | | ]; |
| | |
| | | */ |
| | | private String tokenKey; |
| | | |
| | | /** |
| | | * 超级管理员 |
| | | */ |
| | | private String superUsername; |
| | | |
| | | } |
| | |
| | | import com.vincent.rsf.server.system.controller.result.LoginResult; |
| | | import com.vincent.rsf.server.system.controller.result.MenuVo; |
| | | import com.vincent.rsf.server.system.entity.Menu; |
| | | import com.vincent.rsf.server.system.entity.Tenant; |
| | | import com.vincent.rsf.server.system.entity.User; |
| | | import com.vincent.rsf.server.system.entity.UserLogin; |
| | | import com.vincent.rsf.server.system.service.*; |
| | |
| | | String accessToken = JwtUtil.buildToken(new JwtSubject(username, user.getTenantId()), |
| | | configProperties.getTokenExpireTime(), configProperties.getTokenKey()); |
| | | userLoginService.saveAsync(user.getId(), accessToken, UserLogin.TYPE_LOGIN, tenantId, null, request); |
| | | return R.ok("Login Success").add(new LoginResult(accessToken, user)); |
| | | Tenant tenant = tenantService.getById(user.getTenantId()); |
| | | return R.ok("Login Success").add(new LoginResult(accessToken, user, tenant.getName())); |
| | | } |
| | | |
| | | @GetMapping("/tenant/list") |
| | |
| | | |
| | | private User user; |
| | | |
| | | private String tenant; |
| | | |
| | | } |
| | |
| | | max: 30 |
| | | min: 10 |
| | | timeout: 5000 |
| | | index: 11 |
| | | index: 11 |
| | |
| | | path: logs/@pom.artifactId@
|
| | |
|
| | | config:
|
| | | token-key: KUHSMcYQ4lePt3r6bckz0P13cBJyoonYqInThvQlUnbsFCIcCcZZAbWZ6UNFztYNYPhGdy6eyb8WdIz8FU2Cz396TyTJk3NI2rtXMHBOehRb4WWJ4MdYVVg2oWPyqRQ2 |
| | | token-key: KUHSMcYQ4lePt3r6bckz0P13cBJyoonYqInThvQlUnbsFCIcCcZZAbWZ6UNFztYNYPhGdy6eyb8WdIz8FU2Cz396TyTJk3NI2rtXMHBOehRb4WWJ4MdYVVg2oWPyqRQ2
|
| | | super-username: root |