SimpleBBS, 一个仿v2ex风格的简单论坛. 前端使用Bootstrap + JQuery, 后台使用Django1.5 + Mongodb.
JavaScript Python
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
deploy
requirements
src
.gitignore
README.md
requirements.txt

README.md

Simplebbs(仿V2ex论坛)

xuwenbao


简介

Simplebbs,仿照V2ex实现完整论坛功能.

  • 使用Django 1.5
  • 数据存储使用Mongodb, ORM使用mongoengine
  • 重写Django Class View,适用于mongoengine快速开发
  • 简单并有良好拓展性的ACL配置式的权限管理
  • 前端使用Bootstrap, JQuery

Class Views(src/utils/views.py)

  • MongoCreateView
  • MongoUpdateView
  • MongoDeleteView
  • MongoDetailView
  • MongoListView

ACL权限管理

为需要权限管理的任何类设置一个 __acl__ 属性,如:

from utils.security import (
    Allow,
    Deny,
    EveryOne,
    Owner,
    Authenticated,
)

class MyDocumnet(object):
    __acl__ = [
        (Allow, EveryOne, 'view'),
        (Allow, Authenticated, 'add'),
        (Allow, Owner, 'change'),
        (Allow, 'group:admin', 'delete'),
    ]

新增一个Django Middleware: users.middlewares.PermissionMiddleware

MIDDLEWARE_CLASSES = (
    'django.middleware.common.CommonMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    # Uncomment the next line for simple clickjacking protection:
    # 'django.middleware.clickjacking.XFrameOptionsMiddleware',
    **'users.middlewares.PermissionMiddleware',**
)

为视图函数增加一个装饰器,即可实现权限管理

from utils.security import permission_view

post_list = permission_view(PostListView.as_view(), permission='view', model=Post)

Model Permission Mixin(PermissionMixin)

使用Model类继承PermissionMixin

class Post(PermissionMixin, Document):
    pass

model实例权限判断:

post.has_perm(permission, user_groups, username)