1. 程式人生 > >10-----BBS論壇

10-----BBS論壇

BBS論壇(十)

10.1.客戶端許可權驗證功能完成

(1)cms/cms_profile

顯示當前使用者的角色和許可權

  <tr>
                <td>角色:</td>
                <td>
                    {% for role in user.roles %}
                        {{ role.name }}
                        {% if not loop.last %},{% endif %}
                    {% endfor %}
                
</td> </tr> <tr> <td>許可權:</td> <td> {% for role in user.roles %} {{ role.desc }} {% if not loop.last %}/{% endif %} {% endfor %}
</td> </tr>

 (2)cms/hooks.py

@bp.context_processor
def cms_context_pocessor():
    return {'CMSPermission':CMSPermission}

 (3)cms/cms_base.html

不同的角色,顯示不同的內容

{% set cms_user = g.cms_user %}
                {% if cms_user.has_permission(CMSPermission.POSTER) %}
                    
<li class="nav-group post-manage"><a href="#">帖子管理</a></li> {% endif %} {% if cms_user.has_permission(CMSPermission.COMMENTER) %} <li class="comments-manage"><a href="#">評論管理</a></li> {% endif %} {% if cms_user.has_permission(CMSPermission.BOARDER) %} <li class="board-manage"><a href="#">板塊管理</a></li> {% endif %} {% if cms_user.has_permission(CMSPermission.FRONTUSER) %} <li class="nav-group user-manage"><a href="#">前臺使用者管理</a></li> {% endif %} {% if cms_user.has_permission(CMSPermission.CMSUSER) %} <li class="nav-group cmsuser-manage"><a href="#">CMS使用者管理</a></li> {% endif %} {% if cms_user.is_developer %} <li class="cmsrole-manage"><a href="#">CMS組管理</a></li> {% endif %}

(4)新增使用者和角色

#新增訪問者
python manage.py create_cms_user -u 我是訪問者 -p 123456 -e 11111@qq.com

python manage.py add_user_to_role -e [email protected] -n 訪問者


#新增運營者
python manage.py create_cms_user -u 我是運營者 -p 123456 -e 22222@qq.com

python manage.py add_user_to_role -e [email protected] -n 運營


#新增管理員
python manage.py create_cms_user -u 我是管理員 -p 123456 -e 33333@qq.com

python manage.py add_user_to_role -e [email protected] -n 管理員

不同的使用者登入到後臺cms顯示不同的內容

 開發者

訪問者

10.2.服務端許可權驗證功能完成

 (1)後臺剩餘的html頁面

cms_posts.html

{% extends 'cms/cms_base.html' %}

{% block title %}
    帖子管理
{% endblock %}

{% block head %}
    
{% endblock %}

{% block page_title %}
    {{ self.title() }}
{% endblock %}

{% block main_content %}
    帖子管理頁面
{% endblock %}

其它幾個一樣

cms_comments.html
cms_boards.html
cms_fusers.html
cms_cusers.html
cms_croles.html

(2)cms/decorators.py

新增一個許可權驗證的裝飾器

def permission_required(permission):
    def outter(func):
        @wraps(func)
        def inner(*args,**kwargs):
            user = g.cms_user
            if user.has_permission(permission):
                return func(*args,**kwargs)
            else:
                return redirect(url_for('cms.index'))
        return inner
    return outter

(3)cms/views.py

@bp.route('/posts/')
@login_required
@permission_required(CMSPermission.POSTER)
def posts():
    return render_template('cms/cms_posts.html')

@bp.route('/comments/')
@login_required
@permission_required(CMSPermission.COMMENTER)
def comments():
    return render_template('cms/cms_comments.html')

@bp.route('/boards/')
@login_required
@permission_required(CMSPermission.BOARDER)
def boards():
    return render_template('cms/cms_boards.html')

@bp.route('/fusers/')
@login_required
@permission_required(CMSPermission.FRONTUSER)
def fusers():
    return render_template('cms/cms_fusers.html')

@bp.route('/cusers/')
@login_required
@permission_required(CMSPermission.CMSUSER)
def cusers():
    return render_template('cms/cms_cusers.html')

@bp.route('/croles/')
@login_required
@permission_required(CMSPermission.ALL_PERMISSION)
def croles():
    return render_template('cms/cms_croles.html')

(4)cms/cms_base.html

修改url連結

 {% set cms_user = g.cms_user %}
                {% if cms_user.has_permission(CMSPermission.POSTER) %}
                    <li class="nav-group post-manage"><a href="{{ url_for('cms.posts') }}">帖子管理</a></li>
                {% endif %}

                {% if cms_user.has_permission(CMSPermission.COMMENTER) %}
                    <li class="comments-manage"><a href="{{ url_for('cms.comments') }}">評論管理</a></li>
                {% endif %}

                {% if cms_user.has_permission(CMSPermission.BOARDER) %}
                    <li class="board-manage"><a href="{{ url_for('cms.boards') }}">板塊管理</a></li>
                {% endif %}

                {% if cms_user.has_permission(CMSPermission.FRONTUSER) %}
                    <li class="nav-group user-manage"><a href="{{ url_for('cms.fusers') }}">前臺使用者管理</a></li>
                {% endif %}

                {% if cms_user.has_permission(CMSPermission.CMSUSER) %}
                    <li class="nav-group cmsuser-manage"><a href="{{ url_for('cms.cusers') }}">CMS使用者管理</a></li>
                {% endif %}

                {% if cms_user.is_developer %}
                    <li class="cmsrole-manage"><a href="{{ url_for('cms.croles') }}">CMS組管理</a></li>
                {% endif %}

 end。。。

 

 

10.1.客戶端許可權驗證功能完成
10.2.服務端許可權驗證功能完成

10.1.客戶端許可權驗證功能完成

(1)cms/cms_profile

顯示當前使用者的角色和許可權

  <tr>
                <td>角色:</td>
                <td>
                    {% for role in user.roles %}
                        {{ role.name }}
                        {% if not loop.last %},{% endif %}
                    {% endfor %}
                </td>
            </tr>
            <tr>
                <td>許可權:</td>
                <td>
                     {% for role in user.roles %}
                        {{ role.desc }}
                        {% if not loop.last %}/{% endif %}
                    {% endfor %}
                </td>
            </tr>

 (2)cms/hooks.py

@bp.context_processor
def cms_context_pocessor():
    return {'CMSPermission':CMSPermission}

 (3)cms/cms_base.html

不同的角色,顯示不同的內容

{% set cms_user = g.cms_user %}
                {% if cms_user.has_permission(CMSPermission.POSTER) %}
                    <li class="nav-group post-manage"><a href="#">帖子管理</a></li>
                {% endif %}

                {% if cms_user.has_permission(CMSPermission.COMMENTER) %}
                    <li class="comments-manage"><a href="#">評論管理</a></li>
                {% endif %}

                {% if cms_user.has_permission(CMSPermission.BOARDER) %}
                    <li class="board-manage"><a href="#">板塊管理</a></li>
                {% endif %}

                {% if cms_user.has_permission(CMSPermission.FRONTUSER) %}
                    <li class="nav-group user-manage"><a href="#">前臺使用者管理</a></li>
                {% endif %}

                {% if cms_user.has_permission(CMSPermission.CMSUSER) %}
                    <li class="nav-group cmsuser-manage"><a href="#">CMS使用者管理</a></li>
                {% endif %}

                {% if cms_user.is_developer %}
                    <li class="cmsrole-manage"><a href="#">CMS組管理</a></li>
                {% endif %}

(4)新增使用者和角色

#新增訪問者
python manage.py create_cms_user -u 我是訪問者 -p 123456 -e 11111@qq.com

python manage.py add_user_to_role -e [email protected] -n 訪問者


#新增運營者
python manage.py create_cms_user -u 我是運營者 -p 123456 -e 22222@qq.com

python manage.py add_user_to_role -e [email protected] -n 運營


#新增管理員
python manage.py create_cms_user -u 我是管理員 -p 123456 -e 33333@qq.com

python manage.py add_user_to_role -e [email protected] -n 管理員

不同的使用者登入到後臺cms顯示不同的內容

 開發者

訪問者

10.2.服務端許可權驗證功能完成

 (1)後臺剩餘的html頁面

cms_posts.html

{% extends 'cms/cms_base.html' %}

{% block title %}
    帖子管理
{% endblock %}

{% block head %}
    
{% endblock %}

{% block page_title %}
    {{ self.title() }}
{% endblock %}

{% block main_content %}
    帖子管理頁面
{% endblock %}

其它幾個一樣

cms_comments.html
cms_boards.html
cms_fusers.html
cms_cusers.html
cms_croles.html

(2)cms/decorators.py

新增一個許可權驗證的裝飾器

def permission_required(permission):
    def outter(func):
        @wraps(func)
        def inner(*args,**kwargs):
            user = g.cms_user
            if user.has_permission(permission):
                return func(*args,**kwargs)
            else:
                return redirect(url_for('cms.index'))
        return inner
    return outter

(3)cms/views.py

@bp.route('/posts/')
@login_required
@permission_required(CMSPermission.POSTER)
def posts():
    return render_template('cms/cms_posts.html')

@bp.route('/comments/')
@login_required
@permission_required(CMSPermission.COMMENTER)
def comments():
    return render_template('cms/cms_comments.html')

@bp.route('/boards/')
@login_required
@permission_required(CMSPermission.BOARDER)
def boards():
    return render_template('cms/cms_boards.html')

@bp.route('/fusers/')
@login_required
@permission_required(CMSPermission.FRONTUSER)
def fusers():
    return render_template('cms/cms_fusers.html')

@bp.route('/cusers/')
@login_required
@permission_required(CMSPermission.CMSUSER)
def cusers():
    return render_template('cms/cms_cusers.html')

@bp.route('/croles/')
@login_required
@permission_required(CMSPermission.ALL_PERMISSION)
def croles():
    return render_template('cms/cms_croles.html')

(4)cms/cms_base.html

修改url連結

 {% set cms_user = g.cms_user %}
                {% if cms_user.has_permission(CMSPermission.POSTER) %}
                    <li class="nav-group post-manage"><a href="{{ url_for('cms.posts') }}">帖子管理</a></li>
                {% endif %}

                {% if cms_user.has_permission(CMSPermission.COMMENTER) %}
                    <li class="comments-manage"><a href="{{ url_for('cms.comments') }}">評論管理</a></li>
                {% endif %}

                {% if cms_user.has_permission(CMSPermission.BOARDER) %}
                    <li class="board-manage"><a href="{{ url_for('cms.boards') }}">板塊管理</a></li>
                {% endif %}

                {% if cms_user.has_permission(CMSPermission.FRONTUSER) %}
                    <li class="nav-group user-manage"><a href="{{ url_for('cms.fusers') }}">前臺使用者管理</a></li>
                {% endif %}

                {% if cms_user.has_permission(CMSPermission.CMSUSER) %}
                    <li class="nav-group cmsuser-manage"><a href="{{ url_for('cms.cusers') }}">CMS使用者管理</a></li>
                {% endif %}

                {% if cms_user.is_developer %}
                    <li class="cmsrole-manage"><a href="{{ url_for('cms.croles') }}">CMS組管理</a></li>
                {% endif %}

 end。。。