python角色权限的设置_基于Python-Flask的权限管理9:角色管理

#!/usr/bin/python3#-*- coding: utf-8 -*-

"""@Author : Huguodong

@Version :

------------------------------------

@File : role.py

@Description : 角色管理

@CreateTime : 2020/3/19 21:14

------------------------------------

@ModifyTime :"""

from permission import *role= Blueprint('role', __name__)

@role.route('/index', methods=["POST"])defindex():'''获取角色

:return:'''res_dir=request.get_json()if res_dir isNone:returnNO_PARAMETER()

role_name= res_dir.get("role_name")

role_key= res_dir.get("role_key")

page= res_dir.get("page")

page_size= res_dir.get("page_size")

status= res_dir.get("status")

order_column_name= res_dir.get("order_column_name")

order_type= res_dir.get("order_type")try:

model=Role.queryifrole_name:

model= model.filter(Role.role_name.like("%" + role_name + "%"))ifrole_key:

model= model.filter(Role.role_key.like("%" + role_key + "%"))if status is notNone:

model= model.filter(Role.status.in_((1, 2))) if status == 0 else model.filter(Role.status ==status)if order_column_name and order_type and order_type.lower() in ['asc', 'desc']:

model= model.order_by(text(f"{order_column_name} {order_type}"))if not page or page <=0:

page= 1

if not page_size or page_size <=0:

page_size= 10result= model.order_by("created_at").paginate(page, page_size, error_out=False)

data=construct_page_data(result)return SUCCESS(data=data)exceptException as e:

app.logger.error(f"获取角色信息失败:{e}")returnREQUEST_ERROR()

@role.route('/update', methods=["POST", "PUT"])defupdate():'''更新角色

POST方法根据id返回数据

PUT方法更新

:return:'''res_dir=request.get_json()if res_dir isNone:returnNO_PARAMETER()if request.method == "POST":

id= res_dir.get("id")ifid:

model=Role.query.get(id)ifmodel:

dict_data=model_to_dict(model)#获取菜单列表和部门列表

role_menu = Role_Menu.query.with_entities(Role_Menu.menu_id).filter(Role_Menu.role_id ==id).order_by("menu_id").all()

role_dept= Role_Dept.query.with_entities(Role_Dept.dept_id).filter(Role_Dept.role_id ==id).order_by("dept_id").all()

menu_list= [str(i[0]) for i inrole_menu]

dept_list= [str(i[0]) for i inrole_dept]

dict_data['role_menu'] = ','.join(menu_list)

dict_data['role_dept'] = ','.join(dept_list)returnSUCCESS(dict_data)else:returnID_NOT_FOUND()else:

PARAMETER_ERR()if request.method == "PUT":

id= res_dir.get("id")

role_name= res_dir.get("role_name")

role_key= res_dir.get("role_key")

role_sort= res_dir.get("role_sort")

remark= res_dir.get("remark")

status= res_dir.get("status")

role_menu= res_dir.get("role_menu")

data_scope= res_dir.get("data_scope")

role_dept= res_dir.get("role_dept")if id and role_name androle_key:

model=Role.query.get(id)ifmodel:try:

token= request.headers["Authorization"]

user=verify_token(token)

model.role_name=role_name

model.role_key=role_key

model.role_sort=role_sort

model.data_scope=data_scope

model.status=status

model.remark=remark

model.update_by= user['name']

model.update()try:#更新菜单列表

update_menu(id, role_menu)#更新部门

update_dept(id, role_dept)returnSUCCESS()exceptException as e:

app.logger.error(f"更新菜单或部门失败:{e}")return UPDATE_ERROR(msg="更新菜单或部门失败")exceptException as e:

app.logger.error(f"更新角色失败:{e}")returnUPDATE_ERROR()else:returnID_NOT_FOUND()else:returnNO_PARAMETER()

@role.route('/create', methods=["PUT"])defcreate():'''创建角色

:return:'''res_dir=request.get_json()if res_dir isNone:returnNO_PARAMETER()

role_name= res_dir.get("role_name")

role_key= res_dir.get("role_key")

role_sort= res_dir.get("role_sort")

remark= res_dir.get("remark")

status= res_dir.get("status")

role_menu= res_dir.get("role_menu")

token= request.headers["Authorization"]

user=verify_token(token)if role_name androle_key:try:

is_exist= Role.query.filter(Role.role_name ==role_name).first()ifis_exist:return CREATE_ERROR(msg="角色名称已存在")

model=Role()

model.role_name=role_name

model.role_key=role_key

model.role_sort=role_sort

model.remark=remark

model.status=status

model.create_by= user['name']

model.save()ifrole_menu:try:#向角色菜单表插入数据

role_id =model.id

menu_list= role_menu.split(',')

insert_list=[]for menu_id inmenu_list:

insert_list.append({"role_id": role_id, "menu_id": menu_id})if len(insert_list) >0:

role_menu_model=Role_Menu()

role_menu_model.save_all(insert_list)returnSUCCESS()exceptException as e:

model.delete()

app.logger.error(f"新建角色失败:{e}")returnCREATE_ERROR()else:returnSUCCESS()exceptException as e:

app.logger.error(f"新建角色失败:{e}")returnCREATE_ERROR()else:returnNO_PARAMETER()

@role.route('/delete', methods=["DELETE"])defdelete():'''根据ID删除角色

:return:'''res_dir=request.get_json()if res_dir isNone:returnNO_PARAMETER()

role_id= res_dir.get("id")ifrole_id:try:

role=Role.query.get(role_id)ifrole_id:#user_role = User_Role.query.filter_by(role_id=role_id).all()

#if user_role:

#return DELETE_ERROR(msg="该角色已关联用户,无法删除!")

role_dept = Role_Dept.query.filter_by(role_id=role_id).all()ifrole_dept:for role inrole_dept:

role.delete()

role_menu= Role_Menu.query.filter_by(role_id=role_id).all()ifrole_menu:for menu inrole_menu:

menu.delete()

role.delete()returnSUCCESS()else:returnID_NOT_FOUND()exceptException as e:

app.logger.error(f"删除角色失败:{e}")returnDELETE_ERROR()else:returnPARAMETER_ERR()defupdate_menu(id, role_menu):

menu_db=Role_Menu.query.filter(

Role_Menu.role_id==id).all()if role_menu: #如果有菜单

#获取数据库菜单列表

db_list = [str(i.menu_id) for i inmenu_db]#获取传过来的参数

par_list = role_menu.split(',')#获取需要删除和增加的数据

add_list, less_list =get_diff(db_list, par_list)if len(less_list) >0:#删除没有权限的菜单

for menu inmenu_db:if str(menu.menu_id) inless_list:

menu.delete()if len(add_list) >0:

insert_list=[]for menu_id inadd_list:

insert_list.append({"role_id": id, "menu_id": menu_id})

role_menu_model=Role_Menu()

role_menu_model.save_all(insert_list)else: #如果没菜单

#获取数据库菜单列表

for menu inmenu_db:

menu.delete()defupdate_dept(id, role_dept):

dept_db= Role_Dept.query.filter(Role_Dept.role_id ==id).all()ifrole_dept:#获取数据库列表

db_list = [str(i.dept_id) for i indept_db]#获取传过来的参数

par_list = role_dept.split(',')#获取需要删除和增加的数据

add_list, less_list =get_diff(db_list, par_list)if len(less_list) >0:#删除没有权限的菜单

for dept indept_db:if str(dept.dept_id) inless_list:

dept.delete()if len(add_list) >0:

insert_list=[]for dept_id inadd_list:

insert_list.append({"role_id": id, "dept_id": dept_id})

role_menu_model=Role_Dept()

role_menu_model.save_all(insert_list)else:for dept indept_db:

dept.delete()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
基于Python的Flask Web框架可以很方便地实现后台权限管理系统,包括数据库的设计和管理。下面是一个简单的示例: 首先,我们需要安装Flask以及相关的插件,比如Flask-Login、Flask-WTForms和Flask-SQLAlchemy。可以使用pip命令进行安装。 ```python pip install flask flask-login flask-wtf flask-sqlalchemy ``` 接下来,我们可以创建一个Flask应用程序,并配置一些必要的设置和插件。 ```python from flask import Flask from flask_login import LoginManager from flask_sqlalchemy import SQLAlchemy app = Flask(__name__) app.config['SECRET_KEY'] = 'your_secret_key' app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///database.db' db = SQLAlchemy(app) login_manager = LoginManager(app) ``` 在数据库方面,我们可以定义一些模型类来表示用户、角色权限等概念,并使用SQLAlchemy进行数据库操作。 ```python from flask_login import UserMixin class User(UserMixin, db.Model): id = db.Column(db.Integer, primary_key=True) username = db.Column(db.String(50), unique=True) password = db.Column(db.String(100)) role_id = db.Column(db.Integer, db.ForeignKey('role.id')) class Role(db.Model): id = db.Column(db.Integer, primary_key=True) name = db.Column(db.String(50), unique=True) permissions = db.relationship('Permission', backref='role') class Permission(db.Model): id = db.Column(db.Integer, primary_key=True) name = db.Column(db.String(50), unique=True) role_id = db.Column(db.Integer, db.ForeignKey('role.id')) ``` 此外,我们还需要实现用户认证和权限验证的逻辑,可以使用Flask-Login提供的LoginManager来管理用户登录。 ```python from flask_login import login_user, current_user, login_required @login_manager.user_loader def load_user(user_id): return User.query.get(int(user_id)) @app.route('/login', methods=['GET', 'POST']) def login(): if current_user.is_authenticated: return redirect(url_for('index')) form = LoginForm() if form.validate_on_submit(): user = User.query.filter_by(username=form.username.data).first() if user and bcrypt.check_password_hash(user.password, form.password.data): login_user(user) return redirect(url_for('index')) else: flash('登录失败,请检查用户名和密码') return render_template('login.html', form=form) ``` 最后,我们可以使用Flask-WTForms和Flask-SQLAlchemy来创建相应的表单和视图函数,实现用户管理角色管理权限管理等功能。 总的来说,基于Python的Flask Web框架可以很方便地实现后台权限管理系统,通过Flask插件以及数据库模型和视图函数的配合,可以实现用户认证和权限验证的功能。以上只是一个简单的示例,你可以根据自己的需求进行相应的扩展和优化。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值