我想控制谁可以访问我的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模型。我希望它将他们重定向到登录页面,并发出警告,禁止他们从该页面登录。
答案 0 :(得分:1)
由于有了youtube视频,我知道了如何使它正常工作!
查看它以获得更深入的解释!
问题是'/ 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
现在可以正常使用了!