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 11111@qq.com -n 访问者


#添加运营者
python manage.py create_cms_user -u 我是运营者 -p 123456 -e 22222@qq.com

python manage.py add_user_to_role -e 22222@qq.com -n 运营


#添加管理员
python manage.py create_cms_user -u 我是管理员 -p 123456 -e 33333@qq.com

python manage.py add_user_to_role -e 33333@qq.com -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。。。

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

 

posted @   王竹笙  阅读(290)  评论(0编辑  收藏  举报
编辑推荐:
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统
· 【译】Visual Studio 中新的强大生产力特性
· 2025年我用 Compose 写了一个 Todo App
点击右上角即可分享
微信分享提示