Flask-Admin的inaccessible_callback()无法正常工作

时间:2019-05-24 18:25:55

标签: python flask flask-admin

我想控制谁可以访问我的flask应用程序上的管理页面。

我一直在尝试覆盖flask_admin.ModelView的方法“ is_accessible”和“ inaccessible_callback”以解决这种情况。

这是我正在创建的AdminView类:

local playerModel = script.Parent
playerModel.Humanoid.Died:Connect(function()

    -- use the player's name to find the player object in game.Players
    local playerName = playerModel.Name
    local player = game.Players[playerName]

    -- update the leaderboard
    player.leaderstats.PuzzlePieces.Value =  player.leaderstats.PuzzlePieces.Value + 1
end)

和模型:

class AdminView(ModelView):

    def is_accessible(self):
        return current_user.admin

    def inaccessible_callback(self, name, **kwargs):
        # redirect to login page if user doesn't have access
        return redirect(url_for('auth.login', next=request.url))

和AdminView初始化:

class User(db.Model, UserMixin):
    __tablename__ = 'users'
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(50), unique=True)
    email = db.Column(db.String(120), unique=True)
    password_hash = db.Column(db.String(128))
    admin = db.Column(db.Boolean, default=False)

    def __init__(self, username=None, email=None, password=None):
        self.username = username
        self.email = email
        self.password_hash = password_hash
        self.admin = admin

在应用程序工厂中被调用

def init_admin(admin):
    from app.models import User
    admin.add_view(AdminView(User, db.session))

当我使用def create_app(test_config=None): # create and configure the app app = Flask(__name__, instance_relative_config=True) if test_config is None: # load the isntance config, if it exists, when not testing app.config.from_object(Config) else: # load the test config passed in app.config.from_object(test_config) db.init_app(app) migrate = Migrate(app, db) login_manager.init_app(app) mail.init_app(app) bootstrap.init_app(app) admin = Admin(app, name='app', template_mode='bootstrap3') from app.auth import auth_bp app.register_blueprint(auth_bp) from app.tables import tables_bp app.register_blueprint(tables_bp) init_admin(admin) try: os.makedirs(app.instance_path) except OSError: pass return app 属性设置为admin的用户登录时,它会返回正确的管理页面,其中包含可以使用的用户模型。当我使用具有True属性的用户登录时,它仍然显示admin页面,而没有附加User模型。我希望它将他们重定向到登录页面,并发出警告,禁止他们从该页面登录。

1 个答案:

答案 0 :(得分:1)

由于有了youtube视频,我知道了如何使它正常工作!

Flask_Admin Accessibility

查看它以获得更深入的解释!

问题是'/ admin'页面由PM> add-migration newmigration Error: An assembly specified in the application dependencies manifest (Test.API.deps.json) was not found: package: 'Test.API', version: '1.0.0' path: 'Test.API.dll' 加载

因此,我必须创建自己的子类Flask_Admin.AdminIndexView,并在初始化AdminIndexView时将其设置为index_view参数

这是更新的代码: 我在管理文件中添加了MyIndexView类:

Admin()

然后我在应用程序工厂中设置# ... from flask_admin import AdminIndexView # ... class MyIndexView(AdminIndexView): def is_accessible(self): return current_user.admin def inaccessible_callback(self, name, **kwargs): # redirect to login page if user doesn't have access return redirect(url_for('auth.login', next=request.url)) 参数

index_view

现在可以正常使用了!