wiki force_prefix
This commit is contained in:
@@ -1 +1 @@
|
|||||||
Version 2.00.0 (2012-07-29 16:52:05) dev
|
Version 2.00.0 (2012-07-29 17:37:29) dev
|
||||||
|
|||||||
+44
-16
@@ -2778,13 +2778,16 @@ class Auth(object):
|
|||||||
returns the group_id of the group uniquely associated to this user
|
returns the group_id of the group uniquely associated to this user
|
||||||
i.e. role=user:[user_id]
|
i.e. role=user:[user_id]
|
||||||
"""
|
"""
|
||||||
|
return self.id_group(self.user_group_role(user_id))
|
||||||
|
|
||||||
|
def user_group_role(self, user_id=None):
|
||||||
if user_id:
|
if user_id:
|
||||||
user = self.settings.table_user[user_id]
|
user = self.settings.table_user[user_id]
|
||||||
else:
|
else:
|
||||||
user = self.user
|
user = self.user
|
||||||
role = self.settings.create_user_groups % user
|
return self.settings.create_user_groups % user
|
||||||
return self.id_group(role)
|
|
||||||
|
|
||||||
def has_membership(self, group_id=None, user_id=None, role=None):
|
def has_membership(self, group_id=None, user_id=None, role=None):
|
||||||
"""
|
"""
|
||||||
checks if user is member of group_id or role
|
checks if user is member of group_id or role
|
||||||
@@ -4382,14 +4385,18 @@ def first_paragraph(mm):
|
|||||||
return ''
|
return ''
|
||||||
|
|
||||||
class Wiki(object):
|
class Wiki(object):
|
||||||
|
everybody = 'everybody'
|
||||||
regex_redirect = re.compile('redirect\s+(\w+\://\S+)\s*')
|
regex_redirect = re.compile('redirect\s+(\w+\://\S+)\s*')
|
||||||
def __init__(self,auth,env=None,automenu=True,render='markmin'):
|
def __init__(self,auth,env=None,automenu=True,render='markmin',
|
||||||
|
manage_permissions=False,force_prefix=None):
|
||||||
self.env = env or {}
|
self.env = env or {}
|
||||||
if render == 'markmin':
|
if render == 'markmin':
|
||||||
render = lambda t,env=self.env: \
|
render = lambda t,env=self.env: \
|
||||||
MARKMIN(t.body,url=True,environment=env).xml()
|
MARKMIN(t.body,url=True,environment=env).xml()
|
||||||
self.auth = auth
|
self.auth = auth
|
||||||
self.automenu = automenu
|
self.automenu = automenu
|
||||||
|
perms = self.manage_permissions = manage_permissions
|
||||||
|
self.force_prefix = force_prefix
|
||||||
db = auth.db
|
db = auth.db
|
||||||
db.define_table(
|
db.define_table(
|
||||||
'wiki_page',
|
'wiki_page',
|
||||||
@@ -4398,7 +4405,12 @@ class Wiki(object):
|
|||||||
Field('title',unique=True),
|
Field('title',unique=True),
|
||||||
Field('body','text',notnull=True),
|
Field('body','text',notnull=True),
|
||||||
Field('menu'),
|
Field('menu'),
|
||||||
Field('tags'),
|
Field('tags','list:string'),
|
||||||
|
Field('can_read','list:string',writable=perms,readable=perms,
|
||||||
|
default=[Wiki.everybody]),
|
||||||
|
Field('can_edit','list:string',writable=perms,readable=perms,
|
||||||
|
default=[Wiki.everybody]),
|
||||||
|
Field('changelog'),
|
||||||
Field('html','text',readable=False,writable=False,compute=render),
|
Field('html','text',readable=False,writable=False,compute=render),
|
||||||
auth.signature,format='%(title)s')
|
auth.signature,format='%(title)s')
|
||||||
db.define_table(
|
db.define_table(
|
||||||
@@ -4413,14 +4425,13 @@ class Wiki(object):
|
|||||||
Field('file','upload',required=True),
|
Field('file','upload',required=True),
|
||||||
auth.signature,format='%(title)s')
|
auth.signature,format='%(title)s')
|
||||||
def update_tags_insert(page,id,db=db):
|
def update_tags_insert(page,id,db=db):
|
||||||
print page
|
for tag in page.tags:
|
||||||
for tag in page.tags.split(','):
|
|
||||||
tag = tag.strip().lower()
|
tag = tag.strip().lower()
|
||||||
if tag: db.wiki_tag.insert(name=tag,wiki_page=id)
|
if tag: db.wiki_tag.insert(name=tag,wiki_page=id)
|
||||||
def update_tags_update(dbset,page,db=db):
|
def update_tags_update(dbset,page,db=db):
|
||||||
page = dbset.select().first()
|
page = dbset.select().first()
|
||||||
db(db.wiki_tag.wiki_page==page.id).delete()
|
db(db.wiki_tag.wiki_page==page.id).delete()
|
||||||
for tag in page.tags.split(','):
|
for tag in page.tags:
|
||||||
tag = tag.strip().lower()
|
tag = tag.strip().lower()
|
||||||
if tag: db.wiki_tag.insert(name=tag,wiki_page=page.id)
|
if tag: db.wiki_tag.insert(name=tag,wiki_page=page.id)
|
||||||
db.wiki_page._after_insert.append(update_tags_insert)
|
db.wiki_page._after_insert.append(update_tags_insert)
|
||||||
@@ -4441,10 +4452,20 @@ class Wiki(object):
|
|||||||
return self.cloud()
|
return self.cloud()
|
||||||
else:
|
else:
|
||||||
return self.read(current.request.args(0) or 'index')
|
return self.read(current.request.args(0) or 'index')
|
||||||
|
def check_permission(self,page,field='can_read'):
|
||||||
|
if not self.manage_permissions:
|
||||||
|
return True
|
||||||
|
groups = set(page.get(field,None) or [])
|
||||||
|
if Wiki.everybody in groups or \
|
||||||
|
self.auth.user and groups.intersect(self.auth.user_groups.values()):
|
||||||
|
return True
|
||||||
|
return False
|
||||||
def read(self,slug):
|
def read(self,slug):
|
||||||
if slug in '_cloud':
|
if slug in '_cloud':
|
||||||
return self.cloud()
|
return self.cloud()
|
||||||
page = self.auth.db.wiki_page(slug=slug)
|
page = self.auth.db.wiki_page(slug=slug)
|
||||||
|
#if page and not self.check_permission(page,'can_read'):
|
||||||
|
# raise HTTP(401)
|
||||||
if current.request.extension == 'html':
|
if current.request.extension == 'html':
|
||||||
if not page:
|
if not page:
|
||||||
url = URL(args=('_edit',slug))
|
url = URL(args=('_edit',slug))
|
||||||
@@ -4465,7 +4486,7 @@ class Wiki(object):
|
|||||||
tags=page.tags,
|
tags=page.tags,
|
||||||
created_on=page.created_on,
|
created_on=page.created_on,
|
||||||
modified_on=page.modified_on)
|
modified_on=page.modified_on)
|
||||||
def check_authorization(self,role='wiki_editor',act=False):
|
def check_editor(self,role='wiki_editor',act=False):
|
||||||
if not self.auth.user:
|
if not self.auth.user:
|
||||||
if not act: return False
|
if not act: return False
|
||||||
redirect(self.auth.settings.login_url)
|
redirect(self.auth.settings.login_url)
|
||||||
@@ -4474,22 +4495,29 @@ class Wiki(object):
|
|||||||
raise HTTP(401, "Not Authorized")
|
raise HTTP(401, "Not Authorized")
|
||||||
return True
|
return True
|
||||||
def edit(self,slug):
|
def edit(self,slug):
|
||||||
self.check_authorization()
|
self.check_editor()
|
||||||
auth = self.auth
|
auth = self.auth
|
||||||
db = auth.db
|
db = auth.db
|
||||||
page = db.wiki_page(slug=slug)
|
page = db.wiki_page(slug=slug)
|
||||||
title_guess = ' '.join(c.capitalize() for c in slug.split('-'))
|
title_guess = ' '.join(c.capitalize() for c in slug.split('-'))
|
||||||
db.wiki_page.title.default = title_guess
|
if not page:
|
||||||
db.wiki_page.slug.default = slug
|
if not slug.startswith(self.force_prefix):
|
||||||
db.wiki_page.menu.default = slug
|
raise HTTP(401)
|
||||||
db.wiki_page.body.default = '## %s\n\npage content' % title_guess
|
db.wiki_page.can_read = [Wiki.everybody]
|
||||||
|
db.wiki_page.can_edit = [auth.user_group_role()]
|
||||||
|
db.wiki_page.title.default = title_guess
|
||||||
|
db.wiki_page.slug.default = slug
|
||||||
|
db.wiki_page.menu.default = slug
|
||||||
|
db.wiki_page.body.default = '## %s\n\npage content' % title_guess
|
||||||
|
elif not self.check_permission(page,'can_edit'):
|
||||||
|
raise HTTP(401)
|
||||||
form = SQLFORM(db.wiki_page,page,deletable=True,showid=False).process()
|
form = SQLFORM(db.wiki_page,page,deletable=True,showid=False).process()
|
||||||
if form.accepted:
|
if form.accepted:
|
||||||
current.session.flash = 'page created'
|
current.session.flash = 'page created'
|
||||||
redirect(URL(args=slug))
|
redirect(URL(args=slug))
|
||||||
return dict(content=form)
|
return dict(content=form)
|
||||||
def pages(self):
|
def pages(self):
|
||||||
self.check_authorization()
|
self.check_editor()
|
||||||
self.auth.db.wiki_page.title.represent = lambda title,row: \
|
self.auth.db.wiki_page.title.represent = lambda title,row: \
|
||||||
A(title,_href=URL(args=row.slug))
|
A(title,_href=URL(args=row.slug))
|
||||||
content=SQLFORM.smartgrid(
|
content=SQLFORM.smartgrid(
|
||||||
@@ -4528,7 +4556,7 @@ class Wiki(object):
|
|||||||
request.args(0)==row.slug,
|
request.args(0)==row.slug,
|
||||||
URL(controller,function,args=row.slug),
|
URL(controller,function,args=row.slug),
|
||||||
subtree))
|
subtree))
|
||||||
if self.check_authorization(act=False):
|
if self.check_editor(act=False):
|
||||||
submenu = []
|
submenu = []
|
||||||
if URL() == URL(controller,function) and \
|
if URL() == URL(controller,function) and \
|
||||||
not str(request.args(0)).startswith('_'):
|
not str(request.args(0)).startswith('_'):
|
||||||
|
|||||||
Reference in New Issue
Block a user