tg.ext.repoze.who are repoze.who plugins for turbogears 2(谁是repoze.who是涡轮齿轮2的插件)

tg.ext.repoze.who的Python项目详细描述


示例repoze.who tg2的中间件配置和插件。这个包
取决于repoze.who 0.8或更高版本。


尝试它

-将tg2安装到virtualenv中。

-通过"setup.py
install"将这个包安装到同一个virtualenv中。

-使用virtualenv的python创建一个tg2快速启动项目。

-in您的development.ini项目…

-在项目的config.middleware模块中,在"Custom Middleware here"下面添加以下内容:

dbsession)

-在模型中添加以下定义。

groups\u table=table('tg\u group',metadata,
column('group\u id',integer,primary\u key=true)、
column('group\u name',unicode(16),unique=true)、
column('display\u name',unicode(255)),
列('created',datetime,default=datetime.datetime.now)



用户表=表('tg_用户',元数据,
列('user_id',integer,primary_key=true),
列('user_name',unicode(16),unique=true),
列('email_address',unicode(255),unique=true),
列('display_name',unicode(255)),
列('password',unicode(40)),
列('created',datetime,default=datetime.datetime.now)



permissions_table=table('tg_permission',metadata,
列('permission_id',integer,primary_key=true),
列('权限名称',Unicode(16),唯一=真),
列('说明',Unicode(255))



user_group_table=table('tg_user_group',元数据,
列('user_id',整数,foreignkey('tg_user.user_id',
onupdate="cascade",ondelete="cascade"),
column('group_id',integer,foreignkey('tg_group.group_id',
onupdate="cascade",ondelete="cascade"))



group_permission_table=table('tg_group_permission',metadata,
column('group_id',integer,foreignkey('tg_group.group_id',
onupdate="cascade",ondelete="cascade"),
列('permission\u id',integer,foreignkey('tg\u permission.permission\u id',
onupdate="cascade",ondelete="cascade"))



可能需要其他
属性。
"
def repr(self):
return"<;user:email="%s",display name="%s">;"%(self.email地址,self.display名称)

def权限(self):
perms=set()
在self.groups中:
perms=perms set(g.permissions)
return perms
permissions=property(permissions)


def by廑email廑address(klass,email):
"一个类方法,可用于根据用户的电子邮件地址搜索用户,因为是唯一的。
"
session=dbsession()
返回session.query(klass).filter(klass.email==email).first()

用户名:
"一个类方法,允许根据用户的用户名属性搜索用户
。"
"
session=dbsession()
返回session.query(klass).filter(klass.user\u name==username).first()

=classmethod(按用户名)


def\u set\u password(self,password):
"使用配置中定义的加密算法动态加密密码"
"
"algorithm=config.get('authorize.hashmethod',none)
self.\u password=self.\u encrypt\u password(algorithm,password)


def\u get\u password(self):
"返回password
""返回self.\u password



def\u encrypt\u密码(self,algorithm,password):
"使用指定的算法散列给定密码。算法的有效值
为"md5"和"sha1"。所有其他算法值基本上都是不可操作的。""
哈希密码=password


如果是instance(password,unicode):
password bit=password.encode('utf-8')

否则:
password bit=password

如果"md5"==算法:
散列密码=md5.new(password bit).hexDigest()

elif"sha1"==算法:
散列密码=sha.new(password bit).hexDigest()

;todo:重新添加提供自己的hasing算法的可能性#在这里。。。只需获取真正的配置…

elif"custom"==算法:
无)(如果自定义加密路径:
=自定义加密(密码8位)

unicode):
散列密码=散列密码。decode('utf-8')


返回散列密码

def validate\u password(self,密码:
"根据现有凭据检查密码。
""
算法=config.get('authorize.hashmethod',none)
返回self.password==self.\u加密密码(算法,密码)

类权限(对象):
"确定每个组可以做什么的关系"
"传递


mapper(用户,用户表,
properties=dict(密码=用户表.c.password))

mapper(组,组表,
properties=dict(users=relation(user,
secondary=user_group_table,backref='groups'))

映射器(permission,permissions_table,
properties=dict(groups=relation(group,
secondary=group_permission_table,backref='permissions'))


-在控制器中添加以下导入。根文件::


from tgrepozewho import authorize

-向控制器添加以下方法。根:rootcontroller
类::

@expose('whotg.templates.about')
@authorize.require(authorize.has_permission('manage'))
仅定义管理权限(self,**kw):
返回dict(now=now,page='about')

@expose('whotg.templates.about')
@authorize.require(authorize.is_user('editor'))
仅定义编辑器用户(self,**kw):
返回dict(now=now,page='about')

@expose('whotg.templates.login')
def login(self,**kw):
come撸from=kw.get('come撸from','/')
返回dict(now=now,page='login',header=lambda*arg:none,
footer=lambda*arg:none,come廑from=come廑from)




-将以下模板作为"login.html"添加到项目的
"template s"目录中::

<;!doctype html public"-//w3c//dtd xhtml 1.0 transitional//en"
"http://www.w3.org/tr/xhtml l1/dtd/xhtml l1 transitional.dtd">;
<;html xmlns="http://www.w3.org/1999/xhtml"
XMLNs:Py="http://www. W3.org//x/5"& gt;
& l>;X:包括Hrff ="Mr.html"/Br/>< Br/> &
& Meta内容="text /html;字符集=UTF-8"http Adv="内容类型"Py:Posie="A'"/gt;
<;title>;登录表单<;title>;
<;head>;


<;body>;

<;表单操作="/登录处理程序?come嫒from=${come嫒from}method="post">;
登录:<;输入类型="text"name="login">;<;/input>;<;br/>;
密码:<;输入类型="password"name="password">;<;/input>;<;br/>;
<;输入类型="submit"name="submit"/>;
<;/form>;

<;/body>;
<;/html>;

-通过调整development.ini文件以正常方式设置数据库配置

-使用以下命令创建必要的表:


paster setup app development.ini

-在数据库中手动创建用户

-创建组(任何名称),以及名为"manage"的权限,将此权限链接到您刚刚创建的组,并将一个用户添加到您的组。

-创建另一个不在组中但名为"editor"的用户

-通过粘贴服务启动项目服务器::


paster server--reload development.ini

-访问http://localhost:8080/editor-user-u仅在浏览器中。您将看到登录表单。"right"
用户名/密码组合为"editor/editpass"(此用户具有
用户名"editor")。提交这组凭据将显示about页面。任何其他用户名/密码组合都将导致用户再次出现登录表单。请注意,
第一次获得凭据后,如果再次访问/editor_user_only页面,则不会要求您重新验证。通过访问http://localhost:8080/log out_handler强制注销。

-仅在浏览器中访问http://localhost:8080/manage_permission_。
您将看到登录表单。"右"
用户名/密码组合为"manager/managepass"(此用户具有管理权限)。提交这组
凭据将显示"关于"页。任何其他用户名/密码组合都将导致用户再次收到登录表单。请注意,如果您已经作为"编辑器"用户进行了身份验证,并且
您访问了/manage_permission_only页面,则您将注销
并要求您提供凭据(编辑器无法看到此页面)。注意
第一次获得凭据后,如果再次访问/manage_permission_only页面,则不会要求您重新验证。通过访问
http://localhost:8080/log out_handler强制注销。



使用
源包中的"python setup.py test"运行单元测试。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
多线程java线程。join未按预期工作   RegExp-GWT/Javascript的java测试方法   java Selenium RemoteWebDriver似乎无法识别对web元素的javascript更改   java当我从Excel工作表中读取inf时,无法按顺序打印文档文件中的信息   JAVAlang.OutOfMemoryError:尝试连接DB2时的Java堆空间   java无法使用smartband 2从google fit API获取心率数据   java外部化属性文件Widlfly&struts1。十、   java如何监视注入的单例?   如何使java日志输出显示在一行上?   java Jboss ws-wsdl问题   java toUpperCase(char)方法?   安卓 Gradle“应用程序”项目刷新失败原因:Java。Lang.NullPointerException   java Spring安全ACL错误无法找到对象标识的ACL信息   是否有一个REST Web服务API提供程序,如FRAPI(PHP),但用于Java?   java递归方法生成字符串的所有分区   JAVAlang.StringIndexOutOfBoundsException:字符串索引超出范围:9   java将项从集合<CustomObject>中获取到其属性列表中的最佳方法是什么   Java本机启动器性能   多捕获与多捕获的java性能差异   java如何创建BaseDAO+JDBC并像@Autowired变量一样使用它?