【问题标题】:Google AppEngine: Setting up user roles and permissionsGoogle AppEngine:设置用户角色和权限
【发布时间】:2013-11-28 02:42:23
【问题描述】:
我正在学习 Udacity 的 Web 开发课程,该课程使用 Google AppEngine 和 Python。
我想设置特定的用户角色及其分配的权限。例如,我可能有两个用户角色,Employer 和 SkilledPerson,并按如下方式分配他们的权限:
只有 Employers 可以创建 Job 实体。
只有 SkilledPerson 可以创建 Resume 和 JobApplication 实体。
我该怎么做?
如何定义这些用户角色?
如何将一组权限分配给特定角色?
如何允许用户注册为特定角色(Employer 或 SkilledPerson)?
【问题讨论】:
标签:
python
google-app-engine
permissions
roles
app-engine-ndb
【解决方案1】:
制作模型
class Role(ndb.Model):
name = ndb.StringProperty()
class UserRole(ndb.Model):
user = ndb.UserProperty()
roles = ndb.KeyProperty(kind=Role,repeated=True)
让装饰器检查角色中的用户
创建工作之前
@check_user_in_role('Employees')
def create_job():
do_some_thing()
【解决方案2】:
您必须自己管理 user_profile。在您的 user_profile 中,您可以根据需要存储用户 ID,例如电子邮件地址或 google 用户 ID。在该实体中添加一个角色数组,您可以在其中存储该用户的所有角色,并使用装饰器管理访问。
例如,作为雇主的用户将在其角色中包含“EMPLOYERS”,并且您使用 @isEmployer 装饰器管理对作业创建处理程序的访问。
使用此解决方案,您可以在将来为您的用户分配许多角色,例如“ADMIN”。
【解决方案3】:
我会创建一个 user_profile 表来存储他们的 Google 用户 ID,以及 is_employer 和 is_skilled_person 的两个布尔字段,因为在您的网站上,某人总是有可能同时担任这两个角色。 (也许我是一个发布工作但也在寻找工作的雇主)
如果您认为拥有多个角色并且一个用户只能是一个角色,我会将其设为一个包含角色名称的字符串字段,例如“employer”、“admin”、“job seeker”等。