Google AppEngine: настройка ролей пользователей и разрешений

Я прохожу курс веб-разработки Udacity, который использует Google AppEngine и Python.

Я хотел бы настроить определенные роли пользователей и назначенные им разрешения. Например, у меня может быть две роли пользователей, Employer и SkilledPerson, и я могу назначить их разрешения следующим образом:

Только Работодатели могут создавать объекты Job. Только SkilledPerson может создавать сущности Resume и JobApplication.

Как мне это сделать?

Как определить эти роли пользователей? Как назначить группу разрешений для определенных ролей? Как разрешить пользователям регистрироваться в качестве определенной роли (работодатель или квалифицированный специалист)?


person hyang123    schedule 14.11.2013    source источник


Ответы (3)


Я бы создал таблицу user_profile, в которой хранится их идентификатор пользователя Google, и два логических поля для is_employer и is_skilled_person, потому что всегда есть потенциал для того, чтобы кто-то мог быть обеими этими ролями на вашем сайте. (Возможно, я работодатель, публикующий вакансию, но также ищущий работу)

Если вы считаете, что у вас есть несколько ролей, а пользователь может быть только одной ролью, я бы сделал это строковым полем, содержащим имя роли, например «работодатель», «администратор», «соискатель» и т. д.

person iandouglas    schedule 26.11.2013

Вы должны сами управлять user_profile. В вашем user_profile вы можете сохранить идентификатор пользователя, такой как адрес электронной почты или идентификатор пользователя Google, как вы хотите. Добавьте массив ролей в этот объект, где вы храните все роли для этого пользователя и управляете доступом с помощью декораторов.

Например, пользователи, которые являются работодателями, будут иметь в своих ролях «EMPLOYERS», и вы управляете доступом к обработчику создания рабочих мест с помощью декоратора @isEmployer. С помощью этого решения вы сможете в будущем назначать своему пользователю множество ролей, таких как «АДМИН».

person Maël    schedule 26.11.2013

Сделать модель

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()
person NamPNQ    schedule 26.11.2013