【问题标题】:web2py: interface for "admin" users to create new users?web2py:“管理员”用户创建新用户的界面?
【发布时间】:2023-07-19 03:51:01
【问题描述】:

我想在我的 web2py 应用程序中禁用正常注册,只允许某些“管理员”用户创建新用户。我知道如何禁用注册,但我不知道如何为用户创建一个界面来创建其他用户。我想要的是一个类似于[app]/default/user/register[app]/appadmin/insert/db/auth_user 的页面,但在您登录时可以访问,并且只有“管理员”用户才能访问。我可以制作一个简单的 HTML 表单,但这样我会失去所有重要的验证器和正常注册所具有的,更重要的是,我会不必要地重复其他人的工作,而不是以“web2py”方式进行。

(更详细地说,我的组有一定的“group_master”用户,保存在数据库的“group_master”表中。我只希望group_masters访问create_user页面,用户创建后会自动加入group_master的组。我想我知道如何在代码中处理组成员的麻烦,但我需要帮助来创建接口。)

【问题讨论】:

    标签: web2py


    【解决方案1】:

    要获取用户输入,您可以创建自定义表单或使用SQLFORM(db.auth_user).process(dbio=False) 之类的东西(dbio=False 可防止在提交表单时自动创建数据库记录)。然后您可以通过以下方式注册用户:

    auth.register_bare(email=request.vars.email, password=request.vars.password)
    

    【讨论】:

    • 这样的? def create_user(): this_form = SQLFORM(db.auth_user).process(dbio=False) if this_form.accepts(request.vars, dbio=False): auth.register_bare(email=request.vars.email, password=request.vars.password) #Do something return dict(this_form=this_form)
    • 当然,尽管您不会在同一个表单对象上同时调用.process().accepts()(前者实际上调用后者)。如果你已经在表单上调用了.process(),那么你可以直接调用if form.accepted: 来测试是否通过了验证。
    • 这似乎可行,我还添加了一些参数来添加 first_name 和 last_name。但它也会为用户添加电子邮件作为registration_id。反正我不知道registration_id的目的是什么,所以似乎没关系(我可以正常登录等新用户)。有关系吗?
    • 不,没关系。