Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions server/crud/internal/roles.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,10 @@ class CRUDRole(CRUDBase[Role]):
def get_roles_by_id(self, session: Session, roles: List[str]):
return session.exec(select(self.model).where(self.model.id.in_(roles))).all()

def check_exist(self, session: Session, name: str):
sql = select(self.model).where(self.model.name == name)
return session.exec(sql).one()

def check_admin(self, session: Session, uid: int) -> bool:
"""
通过uid,判断此用户是否在admin组中
Expand Down
2 changes: 1 addition & 1 deletion server/models/internal/role.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@


class RoleBase(SQLModel):
name: str = Field(max_length=20, sa_column_kwargs={'comment': '角色名'})
name: str = Field(max_length=20, sa_column_kwargs={'unique': True, 'comment': '角色名'})
description: str = Field(max_length=100, sa_column_kwargs={'comment': '描述'})
enable: bool = Field(default=True, sa_column=Column(Boolean, comment='启用'))

Expand Down
2 changes: 1 addition & 1 deletion server/models/internal/user.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@


class UserWithOutPasswd(SQLModel):
name: str = Field(max_length=20, sa_column_kwargs={'comment': '用户名'})
name: str = Field(max_length=20, sa_column_kwargs={'unique': True, 'comment': '用户名'})
enable: bool = Field(default=True, sa_column=Column(Boolean, comment='可用'))
avatar: Optional[str] = Field(max_length=100, sa_column_kwargs={'comment': '头像'})
email: Optional[str] = Field(max_length=20, sa_column_kwargs={'comment': '邮箱'})
Expand Down
31 changes: 26 additions & 5 deletions server/routers/internal/roles.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
from fastapi import APIRouter, Depends, status
from fastapi.exceptions import HTTPException
from sqlmodel import Session
from sqlalchemy.exc import NoResultFound
from ...common.response_code import ApiResponse
from ...common.auth_casbin import Authority
from ...common.database import get_session
Expand Down Expand Up @@ -53,17 +54,37 @@ async def get_roles(search: Pagination[RoleBase], session: Session = Depends(get
)


@router.get('/roles/exist', summary='角色是否存在')
async def check_uname_exist(name: str, session: Session = Depends(get_session)):
try:
crud.internal.role.check_exist(session, name)
except NoResultFound:
return ApiResponse()
else:
return ApiResponse(
message='error',
data='error'
)


@router.post('/roles', summary="新建角色", response_model=ApiResponse[Role],
dependencies=[Depends(Authority('role:add'))])
async def add_roles(role_info: RoleInsert, session: Session = Depends(get_session)):
logger.debug(role_info)
enable_menus = role_info.menus
delattr(role_info, 'menus')
db_obj = crud.internal.role.insert(session, Role(**role_info.dict()))
crud.internal.role.update_menus(session, db_obj, enable_menus)
return ApiResponse(
data=db_obj
)
try:
db_obj = crud.internal.role.insert(session, Role(**role_info.dict()))
crud.internal.role.update_menus(session, db_obj, enable_menus)
return ApiResponse(
data=db_obj
)
except Exception as e:
logger.error(f"add role error:{str(e)}")
return ApiResponse(
code=500,
message=f"新建角色错误"
)


@router.put('/roles', summary="更新角色", response_model=ApiResponse[Role],
Expand Down
19 changes: 14 additions & 5 deletions server/routers/internal/user.py
Original file line number Diff line number Diff line change
Expand Up @@ -34,14 +34,17 @@ async def get_roles(id: Optional[int] = None, session: Session = Depends(get_ses
)


@router.get('/users/exist', summary='用户是否存在', status_code=status.HTTP_204_NO_CONTENT)
@router.get('/users/exist', summary='用户是否存在')
async def check_uname_exist(name: str, session: Session = Depends(get_session)):
try:
crud.internal.user.check_name(session, name)
except NoResultFound:
return
return ApiResponse()
else:
raise HTTPException(status_code=status.HTTP_400_BAD_REQUEST, detail='用户名已存在')
return ApiResponse(
message='error',
data='error'
)


@router.get('/users/{uid}',
Expand Down Expand Up @@ -88,8 +91,14 @@ async def update_user(user_info: UserCreateWithRoles, session: Session = Depends
:param session:
:return:
"""
logger.debug(user_info)
user: User = crud.internal.user.insert(session, user_info)
try:
user: User = crud.internal.user.insert(session, user_info)
except Exception as e:
logger.error(f"User Add Error:{str(e)}")
return ApiResponse(
code=500,
message=f"新建用户错误"
)
new_roles = [role.id for role in user.roles]
for role in new_roles:
casbin_enforcer.add_role_for_user(f'uid_{user.id}', f'role_{role}')
Expand Down
File renamed without changes.
2 changes: 2 additions & 0 deletions www/.env.production
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
NODE_ENV=production
VITE_APP_BASEURL='http://172.16.8.201:8000'
2 changes: 0 additions & 2 deletions www/.env_pro

This file was deleted.

3 changes: 2 additions & 1 deletion www/src/api/roles.js
Original file line number Diff line number Diff line change
Expand Up @@ -6,4 +6,5 @@ export const GetRoleInfo = (roleId) => GET('/api/roles' + roleId)
export const GetRoleEnableMenus = (roleId) => GET('/api/roles/enable-menus', {id: roleId})
export const PostNewRoles = (role) => POST('/api/roles', role)
export const PutRoles = (role) => PUT('/api/roles', role)
export const DeleteRole = (roleId) => DELETE('/api/roles/' + roleId)
export const DeleteRole = (roleId) => DELETE('/api/roles/' + roleId)
export const GetRoleExist = (name) => GET('/api/roles/exist', {name})
1 change: 1 addition & 0 deletions www/src/utils/request.js
Original file line number Diff line number Diff line change
Expand Up @@ -74,6 +74,7 @@ service.interceptors.response.use(
message: response.data.message,
type: 'error'
})
return Promise.reject()
}
},
error => {
Expand Down
8 changes: 0 additions & 8 deletions www/src/views/system/dictonary/index.vue
Original file line number Diff line number Diff line change
Expand Up @@ -142,15 +142,7 @@
}
})

onMounted(() => {
freshCurrentPage()
})

</script>

<style scoped>
.custom_pagination {
margin-top: 10px;
padding-left: 0;
}
</style>
23 changes: 20 additions & 3 deletions www/src/views/system/roles/RoleDialog.vue
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
<template>
<el-dialog :model-value="visible" title="角色编辑页面" width="50%" @close="$emit('update:visible', false)"
destroy-on-close>
<el-form :model="selectData" label-width="80px">
<el-form-item label="角色名称">
<el-form :model="selectData" label-width="80px" :rules="rules">
<el-form-item label="角色名称" prop="name">
<el-input v-model="selectData.name"></el-input>
</el-form-item>
<el-form-item label="角色描述">
Expand Down Expand Up @@ -36,10 +36,11 @@
import {
GetRoleEnableMenus,
PutRoles,
PostNewRoles,
PostNewRoles, GetRoleExist,
} from '@/api/roles'
import {ElNotification} from 'element-plus'
import AutoDict from '@/components/AutoDict'
import {GetUserExist} from '@/api/users'

const props = defineProps(['role', 'visible'])
const emit = defineEmits(['update:visible'])
Expand All @@ -55,6 +56,22 @@
//tree的用法
const menuTree = ref(null)

const rules = reactive({
name: [{required: true, trigger: 'blur', message: '请输入角色名'},
{
required: true, trigger: 'blur',
validator: (rule, value, callback) => {
GetRoleExist(selectData.name).then((response) => {
if (response === 'error') {
callback(new Error('角色名已存在'))
} else {
callback()
}
})
}
}]
})

function GetInfo() {
console.log('id:' + selectData.id)
GetRoleEnableMenus(selectData.id).then((response) => {
Expand Down
21 changes: 19 additions & 2 deletions www/src/views/system/user/UserDialog.vue
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
<template>
<el-form :model="selectData" label-width="80px">
<el-form :model="selectData" label-width="80px" :rules="rules">
<el-form-item label="用户名称" prop="name">
<el-input v-model="selectData.name" :disabled="selectData.id !== null"></el-input>
</el-form-item>
<el-form-item label="状态">
<auto-dict dict-type="switch" code="enable_code" v-model="selectData.enable" />
<auto-dict dict-type="switch" code="enable_code" v-model="selectData.enable"/>
</el-form-item>
<el-form-item label="角色">
<el-checkbox-group v-model="enableRoleList">
Expand All @@ -24,6 +24,7 @@

<script setup>
import {
GetUserExist,
GetUserRoles, PostAddUser, PutNewUser
} from '@/api/users'
import {ElNotification} from 'element-plus'
Expand All @@ -40,6 +41,22 @@
const enableRoleList = ref([])
const selectOptions = ref(null)

const rules = reactive({
name: [{required: true, trigger: 'blur', message: '请输入用户名'},
{
required: true, trigger: 'blur',
validator: (rule, value, callback) => {
GetUserExist(selectData.name).then((response) => {
if (response === 'error') {
callback(new Error('用户名已存在'))
} else {
callback()
}
})
}
}]
})

const getRoles = (userId) => {
console.log(selectData)
GetUserRoles(userId).then((response) => {
Expand Down
8 changes: 8 additions & 0 deletions www/vite.config.js
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,14 @@ export default defineConfig({
},
build: {
outDir: 'dist',
minify: 'terser',
terserOptions: {
compress: {
//发布关闭调试模式
drop_console: true,
drop_debugger: true,
},
},
},
css: {}

Expand Down