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')