CRM【第一篇】rbac组件应用之主机管理系统【auto_luffy.zip】
源码示例下载:rbac组件应用之主机管理系统【auto_luffy.zip】
RBAC组件的使用文档 1.将rbac组件拷贝到项目 2.将rbac/migrations目录下的数据库的迁移记录删除(除了__init__.py) 3.业务系统中用户表结构的设计 业务表结构中的用户表需要和rbac中的用户表有继承关系。如: - 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 class Meta: #加上abstract=True,django以后再做数据库迁移就不会为UserInfo类创建相关的表以及表结构了 #注意:此类可以当做父类,可以被继承(可以把字段加到继承他的类中) abstract=True - 业务中的models.py class UserInfo(RbacUserInfo): #继承了RbacUserInfo中的字段 user = models.OneToOneField(to=RbacUserInfo,verbose_name='用户',on_delete=models.CASCADE) 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',on_delete=models.CASCADE) def __str__(self): return self.user.name 4.将业务系统中的用户表的路径写到配置文件中 --settings.py中 RBAC_USER_MODEL_CLASS = 'app01.models.UserInfo' #业务中的用户表 用于在rbac分配权限时,读取业务表中的用户信息 5.业务逻辑开发 - 将所有的路由都设置一个name,如: urlpatterns = [ re_path('^admin/$', admin.site.urls), re_path(r'^login/$', account.login,name='login'), re_path(r'^logout/$', account.logout,name='logout'), re_path(r'^index/$', account.index,name='index'), #用户相关功能 re_path(r'^user/list/$', user.user_list,name='user_list'), re_path(r'^user/add/$', user.user_add, name='user_add'), re_path(r'^user/edit/(?P<edit_id>\d+)/$', user.user_edit, name='user_edit'), re_path(r'^user/del/(?P<del_id>\d+)/$', user.user_del, name='user_del'), re_path(r'^user/reset_pwd/(?P<reset_id>\d+)/$', user.user_reset_pwd, name='user_reset_pwd'), #主机功能 re_path(r'^host/list/$', host.host_list, name='host_list'), re_path(r'^host/add/$', host.host_add, name='host_add'), re_path(r'^host/edit/(?P<edit_id>\d+)/$', host.host_edit, name='host_edit'), re_path(r'^host/del/(?P<del_id>\d+)/$', host.host_del, name='host_del'), re_path(r'^rbac/', include(('rbac.urls', 'rbac'), namespace='rbac')), ] 用于反向生成url,以及粒度控制到按钮 6.权限信息的录入 -url 中添加rbac的路由分发,注意必须写namespace urlpatterns = [ re_path(r'^rbac/', include(('rbac.urls', 'rbac'), namespace='rbac')), ] - rbac提供的地址进行操作配置 - http://127.0.0.1:8000/rbac/menu/list/ 菜单列表 - http://127.0.0.1:8000/rbac/role/list/ 角色列表 - http://127.0.0.1:8000/rbac/distribute/permissions/ 权限分配 相关配置: #批量操作中,自动发现url,应该排除的url AUTO_DISCOVER_EXCLUDE = [ '/admin/.*', '/login/', '/logout/', '/index/', ] 7.编写用户登录的逻辑 (权限的初始化==>>init_permission(request,user_obj)) def login(request): if request.method == 'GET': return render(request,'login.html') user = request.POST.get('user') pwd = request.POST.get('pwd') print(user,pwd) user_obj = models.UserInfo.objects.filter(name=user,password=pwd).first() if not user_obj: return render(request,'login.html',{'error':'用户名或密码错误'}) init_permission(request,user_obj) return redirect('/index/') 相关的配置:权限和菜单的seeion key: - settings.py PERMISSION_SESSION_KEY = 'luffy_permissions_url_list' MENU_SESSION_KEY = 'luffy_menu_list' 8.编写一个首页的逻辑 def index(request): return render(request,'index.html') 相关的配置: #无需校验,但需登录成功后的 NO_PERMISSIONS_LIST=[ '/logout/', '/index/', ] 9.权限的校验(中间件) 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.middleware.rbac.RbacMiddleware', ] #白名单 WHITE_LIST = [ '/login/', '/admin/.*', ] 10.粒度到按钮级别的控制 {% load rbac %} {% if request|has_permission:'host_add' %} ... {% endif %} ***总结***:目的时希望在任意系统中应用权限系统。 - 用户登录+用户首页+用户注销+业务逻辑 - 项目业务逻辑开发 注意:开发时要灵活运用laout.html中的两个inclusion.tag <div class="pg-body"> <div class="left-menu"> <div class="menu-body"> {% multi_menu request %} #开发时去掉,上线时取回 </div> </div> <div class="right-body"> {% nav_menu request %} #开发时去掉,上线时取回 {% block content %} {% endblock %} </div> </div> - 权限信息的录入 - 配置文件 #注册app INSTALLED_APPS = [ ... 'app01.apps.App01Config', 'rbac.apps.RbacConfig', ] #应用中间件 MIDDLEWARE = [ ... 'rbac.middleware.rbac.RbacMiddleware', ] RBAC_USER_MODEL_CLASS = 'app01.models.UserInfo' #业务中的用户表 #白名单 WHITE_LIST = [ '/login/', '/admin/.*', ] #无需校验,但需登录成功后的 NO_PERMISSIONS_LIST=[ '/logout/', '/index/', ] #登录成功后,权限初始化SESSION_KEY PERMISSION_SESSION_KEY = 'luffy_permissions_url_list' MENU_SESSION_KEY = 'luffy_menu_list' ####################自动找到所有url功能(白名单)#################### #自动发现url,应该排除的url AUTO_DISCOVER_EXCLUDE = [ '/admin/.*', '/login/', '/logout/', '/index/', ] #粒度到按钮的控制
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)