Flask + MongoDB后台管理员授权功能(上)

Flask + MongoDB后台管理员授权功能

需求分析

  1. 实现后台不同角色的管理员授予不同的权限
  2. 超级管理员可以管理其他普通管理员的权限

数据库设计

> db.admin.find().limit(1).pretty()
{
	"_id" : ObjectId("6054969580a74192995fa045"),
	"email" : "caisi1735@163.com",
	"is_effective" : 1,
	"sign_count" : 0,
	"password" : "pbkdf2:sha256:150000$iMLTwJbS$2eb5b6aea5a2943cfba0d8c2623702ec710d58d28df028bb18bab7bbb86a0183",
	"last_signIn_time" : 1616227252,
	"create_time" : 1616156309,
	"auth" : [
		"order_admin",
		"book_admin",
		"user_admin",
		"admin"
	]
}

使用auth数组存储管理员的权限信息

装饰器模块

def admin_login_required(view):
    @functools.wraps(view)
    def wrapped_view(**kwargs):
        if session.get('admin_id') is None:
            return redirect(url_for('signIn.admin_login'))
        return view(**kwargs)
    return wrapped_view


def admin_auth(auth_list=list, *args, **kwargs):
    """权限管理装饰器"""
    def admin_auth_m(func):
        @functools.wraps(func)
        def wrapped_view(*args, **kwargs):
            if session.get('admin_id') is None:
                return redirect(url_for('signIn.admin_login'))
            else:
                if not set(auth_list) & set(session.get('auth')):
                    flash('此菜单 [{}] 您没有权限访问!'.format(request.path))
                    return redirect(request.referrer)
            return func(*args, **kwargs)
        return wrapped_view
    return admin_auth_m

这里使用第二个带参数的装饰器admin_auth,第一个只是登录功能的装饰器。

在这里传入一个列表,与管理员登录成功后保存到session中的auth,都转换为集合set,再进行交集运算,以判断是否有权限。

  • 登录成功后保存的管理员信息,如下
    在这里插入图片描述

使用装饰器装饰路由函数

@bp.route('/', methods=('GET', 'POST'))
@admin_auth(['user_admin'])
def userAdmin():
    """加载用户管理页"""
    page = request.args.get('page', 1, int)
    page_size = 20
    page_view = 5
    try:
        users, total = get_users_total(page, page_size)
    except Exception as e:
        logging.exception('admin userAdmin [Exception]: %s', e)
        return abort(404) + str(e)
    return render_template('admin/userAdmin.html',
                           page_active="userAdmin",
                           users=users,
                           active_page=page,
                           total=total,
                           page_size=page_size,
                           page_count=page_view,
                           )

这里是用户管理模块,授权给管理用户的后台管理员进行管理。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值