角色权限优化

This commit is contained in:
yj 2024-09-14 09:32:25 +08:00
parent 092d78bbb9
commit d77782916c
6 changed files with 41 additions and 33 deletions

View File

@ -8,6 +8,7 @@ import { PostRefresh } from '@/api/Login';
import Avatar from '@/components/Avatar';
import { useNavigate } from 'react-router-dom';
import { agora } from '@/utils/package/agora';
import { role } from '@/config/role';
let time = null as any;
const JoinSetting = forwardRef((_props: any, ref: any) => {
useImperativeHandle(ref, () => ({
@ -127,7 +128,7 @@ const JoinSetting = forwardRef((_props: any, ref: any) => {
{
joinRoomSettingForm.map((item, index) => {
return <div key={index} onClick={async () => {
if (user.roleId === '1') {
if (role.ID.includes(user.roleId)) {
let msg = '';
if (index === 0) {
await agora.getAudioMediaList().then(res => {

View File

@ -13,6 +13,7 @@ import axios from 'axios';
import { useLocation } from 'react-router-dom';
import { storage } from '@/utils';
import StupWizard from '../StupWizard';
import { role } from '@/config/role';
const fs = require('fs').promises;
const { exec } = require('child_process');
const { Column } = Table
@ -128,7 +129,7 @@ const SharedFilesModel = forwardRef((props: any, ref: any) => {
})
}
}} />
{roomUserItem && roomUserItem.roleId === '1' || roomUserItem.isRoomManager ? <ProfileOutlined title={showRowSelection ? '取消框选' : '显示框选'} onClick={() => {
{roomUserItem && role.ID.includes(roomUserItem.roleId) || roomUserItem.isRoomManager ? <ProfileOutlined title={showRowSelection ? '取消框选' : '显示框选'} onClick={() => {
setShowRowSelection(!showRowSelection)
}} style={{ color: showRowSelection ? '#5575F2' : 'white' }} /> : null}
{showRowSelection ? <DeleteOutlined title='删除' onClick={() => {

3
src/config/role.ts Normal file
View File

@ -0,0 +1,3 @@
export const role = {
ID: ['1', '3']
}

View File

@ -9,6 +9,7 @@ import JoinSetting from '@/components/JoinSetting';
import { storage } from '@/utils';
import { PostRefresh } from '@/api/Login';
import { useNavigate } from 'react-router-dom';
import { role } from '@/config/role';
const Index: React.FC = () => {
const navigate = useNavigate();
const [list, setList] = useState({
@ -153,7 +154,7 @@ const Index: React.FC = () => {
<Button type="primary"
iconPosition={'end'}
onClick={async () => {
if (userInfo.roleId === '1') {
if (role.ID.includes(userInfo.roleId)) {
joinSettingRef.current.changeModal(item.roomNum)
} else {
postRefresh(() => {

View File

@ -20,6 +20,7 @@ import SharedFilesModel from '@/components/SharedFilesModel';
import StupWizard from '@/components/StupWizard';
import EquipmentManagement from '@/components/EquipmentManagement';
import UserVideo from '@/components/UserVideo';
import { role } from '@/config/role';
const { confirm } = Modal;
const { exec } = require('child_process');
const fs = require('fs').promises;
@ -460,7 +461,7 @@ const Meeting: React.FC = () => {
break;
// 管理员查看随机用户
case 'Watch':
if (userInfo.roleId !== '1') {
if (!role.ID.includes(userInfo.roleId)) {
let userId = item.watchUids.find((uid: any) => uid === userInfo.uid)
if (userId) {
await agora.allJoinChannelEx()
@ -689,7 +690,7 @@ const Meeting: React.FC = () => {
await agora.muteLocalAudioStream(true)
}
})
if (userInfo.roleId !== '1') {
if (!role.ID.includes(userInfo.roleId)) {
if (item.isRoomManager) {
footerListTemplate[0][2].title = '结束发言'
footerListTemplate[0][2].active = true
@ -710,7 +711,7 @@ const Meeting: React.FC = () => {
item.isShow = true;
}
});
setIsAdmin(res.filter((item: any) => (item.roleId === '1' || item.isRoomManager) && item.isRoom).length)
setIsAdmin(res.filter((item: any) => (role.ID.includes(item.roleId) || item.isRoomManager) && item.isRoom).length)
return res
})
}
@ -747,7 +748,7 @@ const Meeting: React.FC = () => {
for (const key in item.user) {
userItem[key] = item.user[key];
}
userItem.isAdmin = item.user.roleId === '1' || item.user.isRoomManager;
userItem.isAdmin = role.ID.includes(item.user.roleId) || item.user.isRoomManager;
refreshVideoView(userItem)
}
if (key === 'ManagerRefresh') {
@ -764,12 +765,12 @@ const Meeting: React.FC = () => {
userItem[key] = item.user[key];
}
userItem.isRoom = true;
userItem.isAdmin = item.user.roleId === '1' || item.user.isRoomManager;
userItem.isAdmin = role.ID.includes(item.user.roleId) || item.user.isRoomManager;
refreshVideoView(userItem)
return [...res]
} else {
item.user.isRoom = true;
item.user.isAdmin = item.user.roleId === '1' || item.user.isRoomManager;
item.user.isAdmin = role.ID.includes(item.user.roleId) || item.user.isRoomManager;
refreshVideoView(item.user)
return [...res, item.user]
}
@ -1152,7 +1153,7 @@ const Meeting: React.FC = () => {
res.data.forEach((item: any) => {
item.isShow = true;
item.isRoom = true;
item.isAdmin = item.roleId === '1' || item.isRoomManager
item.isAdmin = role.ID.includes(item.roleId) || item.isRoomManager
})
setRoomUserList(res.data)
getUserRoomInfo().then(async (res) => {
@ -1310,7 +1311,7 @@ const Meeting: React.FC = () => {
return new Promise((resolve, _reject) => {
setRoomUserList((res: any) => {
let userItem = res.find((item: any) => item.uid === userInfo.uid)
if (userItem && (userItem.roleId === '1' || userItem.isRoomManager)) {
if (userItem && (role.ID.includes(userItem.roleId) || userItem.isRoomManager)) {
resolve(userItem)
} else {
resolve('')
@ -1517,7 +1518,7 @@ const Meeting: React.FC = () => {
}
}}
>
<div className={`${styles.meetingContentSwiperCardVdeio} ${(item.uid === currentVideoId) && !isVideoFullScreen ? styles.active : ''} ${(item.roleId === '1' || item.isRoomManager) && !isVideoFullScreen ? styles.boxShadow : ''}`} id={`video-${item.uid}`}>
<div className={`${styles.meetingContentSwiperCardVdeio} ${(item.uid === currentVideoId) && !isVideoFullScreen ? styles.active : ''} ${(role.ID.includes(item.roleId) || item.isRoomManager) && !isVideoFullScreen ? styles.boxShadow : ''}`} id={`video-${item.uid}`}>
<div className={styles.meetingContentSwiperCardVdeioLoading}>
<Avatar name={item.userName} />
</div>
@ -1527,9 +1528,9 @@ const Meeting: React.FC = () => {
{String(isShare) === item.screenShareId ? <div className={styles.meetingContentSwiperCardShare}>
</div> : null}
{user.roleId === '1' ? <Popover placement="bottom" title={''} content={
{role.ID.includes(user.roleId) ? <Popover placement="bottom" title={''} content={
<div className={styles.meetingContentSwiperCardPopover}>
{item.isRoomManager || item.roleId === '1' ? <Button
{item.isRoomManager || role.ID.includes(item.roleId) ? <Button
type="primary"
className='m-ant-btn'
size={'small'}
@ -1538,7 +1539,7 @@ const Meeting: React.FC = () => {
setAllUserLook(item)
}}
>Ta</Button> : null}
{item.uid !== user.uid && item.roleId !== '1' ? <Button
{item.uid !== user.uid && !role.ID.includes(item.roleId) ? <Button
type="primary"
className='m-ant-btn'
size={'small'}
@ -1714,28 +1715,28 @@ const Meeting: React.FC = () => {
<div><Avatar name={item.userName} /></div>
<span>
{item.userName}{item.uid === user.uid ? '(我)' : ''}
{item.roleId === '1' || item.isRoomManager ?
{role.ID.includes(item.roleId) || item.isRoomManager ?
<span style={{ color: '#02B188', marginLeft: '4px' }}>
{item.roleId === '1' ? '管理员' : '发言人'}
{role.ID.includes(item.roleId) ? '管理员' : '发言人'}
</span>
: null}
</span>
</div>
<div>
{item.roleId === '1' || item.isRoomManager ? <div>
{role.ID.includes(item.roleId) || item.isRoomManager ? <div>
<img src={item.enableMicr ? ImageUrl.icon22 : ImageUrl.icon22Active} alt="" onClick={() => {
postOpenMicr(!item.enableMicr, item.uid)
}} title={item.enableMicr ? '静音' : '解除声音'} />
</div> : null}
{item.roleId === '1' || item.isRoomManager ? <div>
{role.ID.includes(item.roleId) || item.isRoomManager ? <div>
<img src={item.enableCamera ? ImageUrl.icon23 : ImageUrl.icon23Active} alt="" onClick={() => {
postOpenCamera(!item.enableCamera, item.uid)
}} title={item.enableCamera ? '关闭视频' : '开启视频'} />
</div> : null}
{item.uid !== user.uid && user.roleId === '1' ? <div>
{item.uid !== user.uid && role.ID.includes(user.roleId) ? <div>
<Popover placement="left" title={''} content={
<div>
{item.roleId !== '1' ? <Button
{!role.ID.includes(item.roleId) ? <Button
type="primary"
className='m-ant-btn'
style={{ marginBottom: '10px', width: '100%' }}
@ -1817,7 +1818,7 @@ const Meeting: React.FC = () => {
<div
key={index}
className={`${item.uid !== user.uid ? styles.meetingUserChatContentLeft : styles.meetingUserChatContentRight}`}>
{user.roleId === '1' ? <Popover
{role.ID.includes(user.roleId) ? <Popover
placement="bottom"
title={''}
onOpenChange={(e: boolean) => {
@ -1833,7 +1834,7 @@ const Meeting: React.FC = () => {
}}
content={
roomUserItem ? <div className={styles.meetingContentSwiperCardPopover}>
{roomUserItem.isRoomManager || roomUserItem.roleId === '1' ? <Button
{roomUserItem.isRoomManager || role.ID.includes(roomUserItem.roleId) ? <Button
type="primary"
className='m-ant-btn'
size={'small'}
@ -1842,7 +1843,7 @@ const Meeting: React.FC = () => {
setAllUserLook(roomUserItem)
}}
>Ta</Button> : null}
{roomUserItem.uid !== user.uid && roomUserItem.roleId !== '1' ? <Button
{roomUserItem.uid !== user.uid && !role.ID.includes(roomUserItem.roleId) ? <Button
type="primary"
className='m-ant-btn'
size={'small'}
@ -1986,7 +1987,7 @@ const Meeting: React.FC = () => {
return <Popover key={rowIndex}
content={
<div className='meetingContentFooterPopover'>
{user.roleId === '1' ?
{role.ID.includes(user.roleId) ?
<Popconfirm
title="提示"
description={`结束会议后,所有人将退出,是否结束?`}
@ -2024,7 +2025,7 @@ const Meeting: React.FC = () => {
</div>
</Popover>
case '申请发言':
if (user.roleId !== '1') {
if (!role.ID.includes(user.roleId)) {
return <div className='drag' onClick={() => changeStatusList(row, itemIndex, rowIndex)} key={rowIndex}>
<img src={row.active ? row.iconActive : row.icon} alt="" />
<span>{row.title}</span>
@ -2032,7 +2033,7 @@ const Meeting: React.FC = () => {
}
return null
case '结束发言':
if (user.roleId !== '1') {
if (!role.ID.includes(user.roleId)) {
return <Popconfirm
key={rowIndex}
title="提示"
@ -2055,7 +2056,7 @@ const Meeting: React.FC = () => {
}
return null
case '会议监控':
if (user.roleId === '1') {
if (role.ID.includes(user.roleId)) {
return <div
className='drag'
onClick={() => changeStatusList(row, itemIndex, rowIndex)}
@ -2208,8 +2209,8 @@ const meetingContentUser = (item: any, bool?: boolean) => {
<>
<div className={styles.meetingContentUser}>
<div className={styles.meetingContentUserName}>
{item.roleId === '1' || item.isRoomManager ?
<div style={{ background: item.roleId === '1' ? '#FDC229' : '#3F51B5' }}>
{role.ID.includes(item.roleId) || item.isRoomManager ?
<div style={{ background: role.ID.includes(item.roleId) ? '#FDC229' : '#3F51B5' }}>
<img src={ImageUrl.icon32} alt="" />
</div> : null}
{
@ -2220,9 +2221,9 @@ const meetingContentUser = (item: any, bool?: boolean) => {
</div> : ''}
</label>
}
<span style={{ maxWidth: bool ? '' : '8vw' }} title={`${item.userName}${item.roleId === '1' || item.isRoomManager ? item.roleId === '1' ? '(管理员)' : '(发言人)' : ''}`}>
<span style={{ maxWidth: bool ? '' : '8vw' }} title={`${item.userName}${role.ID.includes(item.roleId) || item.isRoomManager ? role.ID.includes(item.roleId) ? '(管理员)' : '(发言人)' : ''}`}>
{item.userName}
{item.roleId === '1' || item.isRoomManager ? item.roleId === '1' ? '(管理员)' : '(发言人)' : ''}
{role.ID.includes(item.roleId) || item.isRoomManager ? role.ID.includes(item.roleId) ? '(管理员)' : '(发言人)' : ''}
</span>
</div>
</div>

View File

@ -12,6 +12,7 @@ import {
} from "agora-electron-sdk";
import { GetRoomRtcToken, GetAgoraConf } from "@/api/Home/Index";
import { storage } from '@/utils';
import { role } from "@/config/role";
const option: any = {
appId: '',
token: '',
@ -271,7 +272,7 @@ export const agora = {
{
clientRoleType: bool ? ClientRoleType.ClientRoleAudience : ClientRoleType.ClientRoleBroadcaster, //用户角色 ClientRoleBroadcaster 主播 ClientRoleAudience 观众
autoSubscribeAudio: false,//设置是否自动订阅所有音频流
autoSubscribeVideo: user.roleId === '1' ? true : false,//设置是否自动订阅所有视频流
autoSubscribeVideo: role.ID.includes(user.roleId) ? true : false,//设置是否自动订阅所有视频流
publishMicrophoneTrack: false,//设置是否发布麦克风采集到的音频
publishCameraTrack: true,//设置是否发布摄像头采集的视频
publishScreenTrack: false,//设置是否发布屏幕采集的视频