Exemplo n.º 1
0
def menus():
    user = current_user

    def check_auth(path):
        if user.is_active == True:
            if user.group_id == 1:
                return True
            all_menus = db.session.query(MenuAuth).order_by(
                MenuAuth.sort.asc()).all()
            rules_str = user.group.rules
            rules = []
            if rules_str:
                rules = json.loads(rules_str)
            all_menu_list = []
            auth_menu_list = []
            for menu in all_menus:
                all_menu_list.append(menu.method)
                for rule_id in rules:
                    if int(menu.id) == rule_id:
                        auth_menu_list.append(menu.method)

            if path in all_menu_list and path not in auth_menu_list:
                return False
            return True

    # 获取登陆后菜单
    if user.is_active == True:
        # 设置admin蓝图下全局变量
        auth = Auth(user)
        menus = auth.auth_menus()
        return {'menus': menus, 'check_auth': check_auth}
    return {'check_auth': check_auth}
Exemplo n.º 2
0
    def post(self):
        # 1.获取参数
        dict_data = request.json
        mobile = dict_data.get("mobile")
        password = dict_data.get("password")

        # 2.校验参数
        if not all([mobile, password]):
            return jsonify(code=123, msg='手机号用户名或密码不能为空')

        # 使用 Auth 模块中 jwt Token 进行认证, 将 mobile 与 password 信息作为参数进行验证
        # 验证通过后会返回 jwt Token
        return Auth().authenticate(mobile, password)
Exemplo n.º 3
0
def bedore_request():
    """
    这里要求在登录后才进行数据库的相关操作,所以在这里进行验证
    在蓝图上设置 before_request,进行认证操作,只影响蓝图对象绑定的请求
    导入 auth 模块使用 jwt 来做验证操作
    :return json:
    """
    result = Auth().identify(request)
    if result['code'] == 200:
        # 在创建 app 时,添加反爬功能时已经使用 g 绑定了 user, 这里可以不用设置了
        # g.user = User.query
        return
    else:
        return jsonify(code=123, msg='用户未登录,没有权限进行访问')
Exemplo n.º 4
0
def article_category_list():
    try:
        title = u'文章分类'
        categorys_data = ArticleCategory.get_category_all()
        auth = Auth()
        categorys = auth.tree_list(categorys_data)

        data = {
            "categorys_list": categorys,
        }
        return render_template('admin/article_category_list.html',
                               data=data,
                               title=title)
    except Exception, e:
        app.logger.info(e)
Exemplo n.º 5
0
def user():
    """
    获取用户信息
    :return: json
    """
    # 进行 jwt 验证,验证通过后返回访问信息
    result = Auth().identify(request)

    if result['code'] == 200:
        user = User.query.get(result.get('user_id'))
        user_dict = user.to_dict()
        response_dict = {'code': 200, 'msg': '请求成功', 'data': user_dict}
        return jsonify(response_dict)
    else:
        return jsonify(result)
Exemplo n.º 6
0
def login():
    """
    登陆成功获取到数据获取token和刷新token
    :return:
    """
    res = ResMsg()
    data = request.get_json()
    userName = data['userName']
    password = data["password"]
    citycode = data["citycode"]
    #role= int(data["role"])
    # 未获取到参数或参数不存在
    if not userName or not password or not citycode:
        res.update(code=ResponseCode.InvalidParameter)
        return res.data
    auth = Auth()
    return auth.authenticate(userName, password, citycode)
Exemplo n.º 7
0
    def before_request():
        # 这里使用的是 jwt, 数据用户 id 从 jwt 中读取
        user_id = Auth().get_jwt_data(request)
        if user_id:
            from app.models import User
            # g 是在 before_request 之前创建的
            g.user = User.query.get(user_id)
            # count 变量用于计数
            count = 0
            # 从缓存中查询请求次数
            try:
                count = redis_store.get("request_count:%s" % user_id) or 0
            except Exception as e:
                # current_app 与 g 是同时创建的,生命周期相同
                # 将报错信息记录在 current_app.logger,这里不能 return 否则程序会被阻断
                current_app.logger.error(e)

            if isinstance(count, str):
                count = int(count)

                # 如果次数大于20,直接不让用户再继续了
                # 这里只能等 redis 刷新之后再继续了
                if count >= 20:
                    return jsonify(code=1234, msg='请求过于频繁,请稍后尝试')

                # count 计数,每次登录时自增 1
                count += 1
                try:
                    # 在 redis 中添加数据 user_id count 以及 redis 请求次数有效时间,单位是秒
                    redis_store.set("request_count:%s" % user_id, count, 5)
                except Exception as e:
                    current_app.logger.error(e)

                # 判断用户请求是否包含有浏览器(软件信息以及 http 版本信息等)信息,不过没有,则判定为爬虫
                if not request.user_agent:
                    return jsonify('不是浏览器请求,可能是爬虫')
        return
Exemplo n.º 8
0
import os
from flask import Flask, g, session, Blueprint, render_template
from flask.ext.assets import Environment
from flask.ext.sqlalchemy import SQLAlchemy
from htmlmin.main import minify
from webassets.loaders import PythonLoader as PythonAssetsLoader
from app import assets
from app.utils.auth import Auth

# Config
app = Flask(__name__)
env = os.environ.get('FACTURE_ENV', 'dev')
app.config.from_object('config.%sConfig' % env.capitalize())
auth = Auth()

# Models
db = SQLAlchemy(app)
from app.models import User

# Assets
assets_env = Environment(app)
assets_loader = PythonAssetsLoader(assets)
for name, bundle in assets_loader.load_bundles().items():
    assets_env.register(name, bundle)

# Import & Register Blueprints
from app.users.views import users
from app.home.views import home
from app.organisations.views import orgs
from app.invoices.views import invoices
Exemplo n.º 9
0
def menu_auth():
    menus = MenuAuth.query.order_by('id').all()
    auth = Auth()
    menus = auth.tree_list(menus)
    return render_template('admin/menu_auth.html', data=menus)
Exemplo n.º 10
0
def menu_auth():
    title = u"菜单管理"
    menus = db.session.query(MenuAuth).order_by(MenuAuth.sort.asc()).all()
    auth = Auth()
    menus = auth.tree_list(menus)
    return render_template('admin/menu_auth.html', data=menus, title=title)