mirror of
https://github.com/jupyterhub/jupyterhub.git
synced 2025-10-09 19:13:03 +00:00
creating roles module
This commit is contained in:
@@ -90,6 +90,26 @@ class JSONDict(TypeDecorator):
|
||||
return value
|
||||
|
||||
|
||||
class JSONList(JSONDict):
|
||||
"""Represents an immutable structure as a json-encoded string (to be used for list type columns).
|
||||
|
||||
Usage::
|
||||
|
||||
JSONList(JSONDict)
|
||||
|
||||
"""
|
||||
|
||||
def process_bind_param(self, value, dialect):
|
||||
if isinstance(value, list) and value is not None:
|
||||
value = json.dumps(value)
|
||||
return value
|
||||
|
||||
def process_result_value(self, value, dialect):
|
||||
if value is not None:
|
||||
value = json.loads(value)
|
||||
return value
|
||||
|
||||
|
||||
Base = declarative_base()
|
||||
Base.log = app_log
|
||||
|
||||
@@ -113,6 +133,41 @@ class Server(Base):
|
||||
return "<Server(%s:%s)>" % (self.ip, self.port)
|
||||
|
||||
|
||||
# user:role many:many mapping table
|
||||
user_role_map = Table(
|
||||
'user_role_map',
|
||||
Base.metadata,
|
||||
Column('user_id', ForeignKey('users.id', ondelete='CASCADE'), primary_key=True),
|
||||
Column('role_id', ForeignKey('roles.id', ondelete='CASCADE'), primary_key=True),
|
||||
)
|
||||
|
||||
|
||||
class Role(Base):
|
||||
"""User Roles"""
|
||||
|
||||
__tablename__ = 'roles'
|
||||
id = Column(Integer, primary_key=True, autoincrement=True)
|
||||
name = Column(Unicode(255), unique=True)
|
||||
description = Column(Unicode(1023))
|
||||
scopes = Column(JSONList)
|
||||
users = relationship('User', secondary='user_role_map', backref='roles')
|
||||
|
||||
def __repr__(self):
|
||||
return "<%s %s (%s) - scopes: %s>" % (
|
||||
self.__class__.__name__,
|
||||
self.name,
|
||||
self.description,
|
||||
self.scopes,
|
||||
)
|
||||
|
||||
@classmethod
|
||||
def find(cls, db, name):
|
||||
"""Find a role by name.
|
||||
Returns None if not found.
|
||||
"""
|
||||
return db.query(cls).filter(cls.name == name).first()
|
||||
|
||||
|
||||
# user:group many:many mapping table
|
||||
user_group_map = Table(
|
||||
'user_group_map',
|
||||
|
Reference in New Issue
Block a user