Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
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
Prev Previous commit
系统管理->角色管理:添加新角色增加重复判断
  • Loading branch information
4linuxfun committed Feb 1, 2023
commit c3b355841d64dcbd0981884163b42305a81b71b2
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
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
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})
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