TurboGears – 인증 및 인증
TurboGears 애플리케이션은 기본적으로 인증 및 인증 지원이 활성화 된 기어 박스 툴킷의 빠른 시작 및 설정 앱 옵션에 의해 생성됩니다. auth.py에 선언 된 모델은 bootstrap.py에 할당 된 값에 따라 설정되고 초기화됩니다.
다음 모델은 auth.py에 선언되어 있습니다-
사용자 모델
User 모델은 tg_user 테이블의 디자인을 포함합니다. 이 테이블은 repose.who 패키지에서 사용됩니다. 이 repose.who 패키지는 WSGI 애플리케이션을위한 강력하고 확장 가능한 인증 라이브러리입니다. 사용자 모델의 구조는 다음과 같습니다.
class User(DeclarativeBase):
"""
__tablename__ = 'tg_user'
user_id = Column(Integer, autoincrement = True, primary_key=True)
user_name = Column(Unicode(16), unique = True, nullable = False)
email_address = Column(Unicode(255), unique = True,nullable=False)
display_name = Column(Unicode(255))
_password = Column('password', Unicode(128))
created = Column(DateTime, default = datetime.now)
이 그룹 모델에는 tg_group 테이블 정의가 포함되어 있습니다. 그 정의는 다음과 같이 auth.py에 주어집니다.
class Group(DeclarativeBase):
__tablename__ = 'tg_group'
group_id = Column(Integer, autoincrement = True,primary_key = True)
group_name = Column(Unicode(16),unique = True,nullable = False)
display_name = Column(Unicode(255))
created = Column(DateTime, default = datetime.now)
권한 정의가 포함 된 다른 모델 권한도 설정됩니다.
class Permission(DeclarativeBase):
__tablename__ = 'tg_permission'
permission_id = Column(Integer,autoincrement = True,primary_key = True)
permission_name = Column(Unicode(63), unique = True, nullable = False)
description = Column(Unicode(255))
모델 설정시 다음 데이터가이 테이블에 추가됩니다.
u = model.User()
u.user_name = 'manager'
u.display_name = 'Example manager'
u.email_address = '[email protected]'
u.password = 'managepass'
model.DBSession.add(u)
g = model.Group()
g.group_name = 'managers'
g.display_name = 'Managers Group'
g.users.append(u)
model.DBSession.add(g)
p = model.Permission()
p.permission_name = 'manage'
p.description = 'This permission gives an administrative right'
p.groups.append(g)
model.DBSession.add(p)
u1 = model.User()
u1.user_name = 'editor'
u1.display_name = 'Example editor'
u1.email_address = '[email protected]'
u1.password = 'editpass'
model.DBSession.add(u1)
술어 모델
tg 패키지의 술어 모듈은 술어 검사기에 대한 정의를 포함합니다. 술어는 사용자가 요청 된 소스에 액세스 할 수 있으려면 충족되어야하는 조건입니다. 이러한 술어 또는 조건은 더 많은 술어로 구성 될 수 있습니다.이를 복합 술어라고합니다. 조치 제어기 또는 제어기는 단일 또는 복합과 같이 하나의 술어 만 가질 수 있습니다.
사용자가 로그인하지 않았거나 적절한 권한이없는 경우이 술어 검사기는 repoze.who 미들웨어에 의해 포착 된 401 (HTTP Unauthorized)을 발생시켜 사용자가 로그인 할 수있는 로그인 페이지를 표시하고 완료되면 사용자가 적절한 페이지로 돌아갑니다.
tg.predicates 모듈에 정의 된 다른 조건 또는 술어는 다음과 같습니다.
Sr. 아니. | tg.predicates 모듈 및 설명 |
---|---|
1 | All 지정된 모든 술어가 충족되는지 확인하십시오. |
2 | Any 지정된 술어 중 하나 이상이 충족되는지 확인하십시오. |
삼 | is_user 인증 된 사용자의 사용자 이름이 지정된 사용자 이름인지 확인 |
4 | in_group 사용자가 특정 그룹에 속하는지 확인하십시오. |
5 | in_all_groups 사용자가 지정된 모든 그룹에 속하는지 확인하십시오. |
6 | in_any_group 사용자가 지정된 그룹 중 하나 이상에 속하는지 확인하십시오. |
7 | is_anonymous 현재 사용자가 익명인지 확인하십시오. |
8 | has_permission 현재 사용자에게 지정된 권한이 있는지 확인하십시오. |
9 | has_all_permissions 현재 사용자에게 지정된 모든 권한이 부여되었는지 확인하십시오. |
10 | has_any_permission 사용자에게 지정된 권한 중 하나 이상이 있는지 확인하십시오. |
예를 들어, 술어가있는 경우 grant access user belonging to customers group, 그런 다음 다음 내장 술어 검사기를 사용할 수 있습니다-
from tg.predicates import in_group
p in_group(‘customers’)
다음 술어 검사기는 '루트'사용자 또는 '관리'권한이있는 모든 사람에게 액세스 권한을 부여합니다.
from tg.predicates import Any, is_user, has_permission
p = Any(is_user('root'), has_permission('manage'),
sg = 'Only administrators can remove blog posts')