Skip to content

ghostycn/luffycity_CRM_rbac_demo_help

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

RBAC组件的使用文档

1、将rbac组件拷贝到项目中

2、将rbac/migrations目录中的数据库迁移记录删除

3、进行业务开发

3.1 对于用户表使用onetoone将用户表拆分两种表中,如:

    rbac/models.py
    
        class UserInfo(models.Model):
            """
            用户表
            """
            name = models.CharField(verbose_name='用户名', max_length=32)
            password = models.CharField(verbose_name='密码', max_length=64)
            email = models.CharField(verbose_name='邮箱', max_length=32)
            roles = models.ManyToManyField(verbose_name='拥有的所有角色', to='Role', blank=True)
        
            def __str__(self):
                return self.name
    
    业务/models.py
        
        class UserInfo(models.Model):
            """
            用户表
            """
            user = models.OneToOneField(verbose_name="用户",to=RbacUseerInfo)
            phone = models.CharField(verbose_name="联系方式",max_length=32)
            level_choices = (
                (1,"T1"),
                (2,"T2"),
                (3,"T3")
            )
        
            depart = models.ForeignKey(verbose_name="部门",to='Department')
        
            def __str__(self):
                return self.user.name
    
    缺点: 用户表数据分散
    优点:利用上rbac的用户管理的功能
    
3.2 用户表整合在一张表中(推荐)
    rbac/models.py
        class UserInfo(models.Model):
            """
            用户表
            """
            name = models.CharField(verbose_name='用户名', max_length=32)
            password = models.CharField(verbose_name='密码', max_length=64)
            email = models.CharField(verbose_name='邮箱', max_length=32)
            # 迁移数据库报错解决:
            # roles = models.ManyToManyField(verbose_name='拥有的所有角色', to=Role, blank=True) "to=去掉引号即可"
            
            roles = models.ManyToManyField(verbose_name='拥有的所有角色', to=Role, blank=True)
        
            def __str__(self):
                return self.name
        
            class Meta:
                # django以后再做数据库迁移时,不再为UserInfo类创建相关的表以及结构
                # 此类可以当作"父类",被其他Model类继承
                # 因为时抽象的,清空admin.py文件内容
                abstract = True
    
    业务/models.py
        class UserInfo(RbacUseerInfo):
            """
            用户表
            """
            phone = models.CharField(verbose_name="联系方式",max_length=32)
            level_choices = (
                (1,"T1"),
                (2,"T2"),
                (3,"T3")
            )
            level = models.IntegerField(verbose_name='级别', choices=level_choices)
            depart = models.ForeignKey(verbose_name="部门",to='Department')
        
            def __str__(self):
                return self.name
    
    优点:将所有用户信息放到一张表中(业务的用户表中)
    缺点:在rbac中所有关于用户表的操作,不能使用了
    
    注意:rbac中两处使用了用户表(如果使用用户表使用此方法,请更改下边功能对应代码)
        - 用户管理【删除】
        - 权限分配时用户列表【读取业务中的用户表即可】
    
    对于rbac中的代码修改:
        1、在URl中将用户表的增删改查和修改密码功能删除
        2、在权限分配之时,读取用户表变成通过配置文件来进行指定并导入
        
        setting.py
            # 权限相关配置
            # 业务中的用户表
            RBAC_USER_MODLE_CLASS = "app01.models.UserInfo"
            
        将用户权限相关代码进行修改:
            rbac/views/menu.py
                from django.conf import settings
                from django.utils.module_loading import import_string
                
                # 业务中的用户表 "app01.models.UserInfo"
                user_model_class = import_string(settings.RBAC_USER_MODLE_CLASS)
                将代码中"models.UserInfo"相关代码替换为user_model_class

3.3 业务开发
    - 用户表的增删改查
    - 主机表的增删改查
    
如果要使用rbac中的模版,则需要将模版中的 导航条和菜单注释掉,当业务开发完成之后,上线之前再取消注释
{% multi_menu request %}
{% url_record request %}

4、权限的应用

4.1 将菜单和导航条添加到layout.html中
    <div class="pg-body">
        <div class="left-menu">
            <div class="menu-body">
                {% multi_menu request %}
            </div>
        </div>
        <div class="right-body">
            {% url_record request %}
            {% block content %} {% endblock %}
        </div>
    </div>

4.2 中间件的应用
    MIDDLEWARE = [
        'django.middleware.security.SecurityMiddleware',
        'django.contrib.sessions.middleware.SessionMiddleware',
        'django.middleware.common.CommonMiddleware',
        'django.middleware.csrf.CsrfViewMiddleware',
        'django.contrib.auth.middleware.AuthenticationMiddleware',
        'django.contrib.messages.middleware.MessageMiddleware',
        'django.middleware.clickjacking.XFrameOptionsMiddleware',
        'rbac.middlewares.rbac.RbacMiddleware'
    ]

4.3 白名单处理 setting.py 中添加以下配置
    VALID_URL_LIST = [
        '/login/',
        '/admin/.*'
    ]

4.4 权限初始化 setting.py 中添加以下配置
    首先通过页面添加用户对应的角色与权限
    # 权限在Session中存储的key
    PERMISSION_SESSION_KEY = "luffy_permission_url_list_key"
    # 菜单在Session中存储的key
    MENU_SESSION_KEY = "luffy_permission_menu_key"

4.5 批量操作权限时,自动发现路由中所有的URl,应该排查的URL
    AUTO_DISCOVER_EXCLUDE = [
        '/admin/.*',
        '/login/',
        '/logout/',
        '/index/',
    ]

4.6 用户登录逻辑
    写完用户登录逻辑,对于 /index/,/login/,/logout/, 三个是否用分配
    方案一:
        将 /index/,/logout/,录入数据库。以后给每个用户都分配该权限
    
    方案二:
        默认用户登录后,都能访问/index/和/login/

About

crm系统rbac组件,可以开箱即用,带help文档

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published