65 lines
2.1 KiB
Python
65 lines
2.1 KiB
Python
# -*- python -*-
|
|
# -*- coding: utf-8 -*-
|
|
import sqlalchemy as sa
|
|
from sqlalchemy import orm
|
|
|
|
from gnuviechadminweb.model import meta
|
|
|
|
t_menu = \
|
|
sa.Table("menu", meta.metadata,
|
|
sa.Column("id", sa.types.Integer, primary_key=True),
|
|
sa.Column("title", sa.types.String(40), nullable=False),
|
|
sa.Column("controller", sa.types.String(40), nullable=False),
|
|
sa.Column("action", sa.types.String(40), nullable=False)
|
|
)
|
|
|
|
t_user = \
|
|
sa.Table("user", meta.metadata,
|
|
sa.Column("id", sa.types.Integer, primary_key=True),
|
|
sa.Column("name", sa.types.String(40), nullable=False),
|
|
sa.Column("password", sa.types.String(128), nullable=False)
|
|
)
|
|
|
|
t_role = \
|
|
sa.Table("role", meta.metadata,
|
|
sa.Column("id", sa.types.Integer, primary_key=True),
|
|
sa.Column("name", sa.types.String(40), nullable=False)
|
|
)
|
|
|
|
t_menu_role = \
|
|
sa.Table("menu_role", meta.metadata,
|
|
sa.Column("id", sa.types.Integer, primary_key=True),
|
|
sa.Column("menu_id", sa.types.Integer, sa.ForeignKey(t_menu.c.id)),
|
|
sa.Column("role_id", sa.types.Integer, sa.ForeignKey(t_role.c.id))
|
|
)
|
|
|
|
t_user_role = \
|
|
sa.Table("user_role", meta.metadata,
|
|
sa.Column("id", sa.types.Integer, primary_key=True),
|
|
sa.Column("user_id", sa.types.Integer, sa.ForeignKey(t_user.c.id)),
|
|
sa.Column("role_id", sa.types.Integer, sa.ForeignKey(t_role.c.id))
|
|
)
|
|
|
|
class Menu(object):
|
|
@classmethod
|
|
def allowed(cls, user=None):
|
|
menu_q = meta.Session.query(cls)
|
|
return menu_q.all()
|
|
|
|
class User(object):
|
|
pass
|
|
|
|
class Role(object):
|
|
pass
|
|
|
|
orm.mapper(Menu, t_menu, {
|
|
'roles' : orm.relation(Role, secondary = t_menu_role),
|
|
})
|
|
orm.mapper(Role, t_role, properties = {
|
|
'users' : orm.relation(User, secondary = t_user_role),
|
|
'menus' : orm.relation(Menu, secondary = t_menu_role),
|
|
})
|
|
orm.mapper(User, t_role, properties = {
|
|
'roles' : orm.relation(User, secondary = t_user_role)
|
|
})
|