后台访问权限控制

需求

  • 解决普通用户登录之后直接访问后台具体的视图函数的问题
  • 如果是普通用户访问后台的视图函数,直接跳转到项目主页,不再执行后续的逻辑判断
  • 后台后续要实现多个视图函数,如果每一个函数内部都去判断用户权限,那么代码重复率高,冗余代码较多
  • 所以得有一个统一判断入口,后台模块中,除了登录页面,后台的其他页面都要判断是否具有管理员权限
  • 采用的方式为:请求勾子中的 before_request,来请求之前进行判断

代码实现

  • modules/admin/__init__.py 文件中,添加请求勾子函数
@admin_blu.before_request
def before_request():
    # 判断如果不是登录页面的请求
    if not request.url.endswith(url_for("admin.admin_login")):
        user_id = session.get("user_id")
        is_admin = session.get("is_admin", False)

        if not user_id or not is_admin:
            # 判断当前是否有用户登录,或者是否是管理员,如果不是,直接重定向到项目主页
            return redirect('/')
  • 完善退出登录相关代码,在退出登录时候,也要清空是否是管理员的相关数据
    • modules/passport/views.py
@passport_blu.route("/logout", methods=['POST'])
def logout():
    """
    清除session中的对应登录之后保存的信息
    :return:
    """
    session.pop('user_id', None)
    session.pop('nick_name', None)
    session.pop('mobile', None)
    session.pop('is_admin', None)

    # 返回结果
    return jsonify(errno=RET.OK, errmsg="OK")