nineaiyu / xadmin-server Goto Github PK
View Code? Open in Web Editor NEWxadmin-基于Django+vue3的rbac权限和数据权限管理系统
License: MIT License
xadmin-基于Django+vue3的rbac权限和数据权限管理系统
License: MIT License
把消息中心的页面复制到一个新的路由页面之后 消息中心页面并没有正常显示,请问是有什么检验规则(尝试迁移其他页面也一样)
1.我创建了一个普通用户 仅查看权限 以及管理员 可操作全部数据 但是我发现在查看测试数据时无法正常显示已新增数据, 观察后台日志发现他会默认在查询时传参id=000000 如下
SELECT COUNT(*) AS __count
FROM XXXXXXX
WHERE (XXXXXXX
.id
= '00000000000000000000000000000000' OR XXXXXXX
.id
= '00000000000000000000000000000000'); args=('00000000000000000000000000000000', '00000000000000000000000000000000'); alias=default
在common/core的filter.py文件中 的 permission = DataPermission.objects.filter(is_active=True).filter(deptinfo=p_dept_obj).filter(dq)这一步出现的上面查询条件
非常看好该项目,想咨询一下后续是否会添加API接口文档,例如swagger UI等。
使用如下服务启动后:
python manage.py runserver 0.0.0.0:8896
python -m celery -A server flower -logging=info --url_prefix=/api/flower --auto_refresh=False --address=127.0.0.1 --port=5566
python -m celery -A server beat -l INFO --scheduler django_celery_beat.schedulers:DatabaseScheduler --max-interval 60
python -m celery -A server worker -P prefork -l INFO --autoscale 10,3 -Q celery --heartbeat-interval 10 -n celery@%h --without-mingle
无法在前端页面通过:http://127.0.0.1:5566/api/flower
麻烦抽空提供一个详细的指导呢?感谢作者
`(.venv) dengwang@dengwangs-MacBook-Pro xadmin-server % python manage.py createsuperuser
System check identified some issues:
WARNINGS:
system.DataPermission.menu: (fields.W340) null has no effect on ManyToManyField.
system.DeptInfo.roles: (fields.W340) null has no effect on ManyToManyField.
system.DeptInfo.rules: (fields.W340) null has no effect on ManyToManyField.
system.FieldPermission.field: (fields.W340) null has no effect on ManyToManyField.
system.Menu.model: (fields.W340) null has no effect on ManyToManyField.
system.NoticeMessage.notice_dept: (fields.W340) null has no effect on ManyToManyField.
system.NoticeMessage.notice_role: (fields.W340) null has no effect on ManyToManyField.
system.NoticeMessage.notice_user: (fields.W340) null has no effect on ManyToManyField.
system.UserInfo.roles: (fields.W340) null has no effect on ManyToManyField.
system.UserInfo.rules: (fields.W340) null has no effect on ManyToManyField.
system.UserRole.menu: (fields.W340) null has no effect on ManyToManyField.
Username: adminn
Email address: [email protected]
Password:
Password (again):
Traceback (most recent call last):
File "/Users/dengwang/Code/Python/gene/xadmin-server/manage.py", line 22, in
main()
File "/Users/dengwang/Code/Python/gene/xadmin-server/manage.py", line 18, in main
execute_from_command_line(sys.argv)
File "/Users/dengwang/Code/Python/gene/xadmin-server/.venv/lib/python3.11/site-packages/django/core/management/init.py", line 442, in execute_from_command_line
utility.execute()
File "/Users/dengwang/Code/Python/gene/xadmin-server/.venv/lib/python3.11/site-packages/django/core/management/init.py", line 436, in execute
self.fetch_command(subcommand).run_from_argv(self.argv)
File "/Users/dengwang/Code/Python/gene/xadmin-server/.venv/lib/python3.11/site-packages/django/core/management/base.py", line 413, in run_from_argv
self.execute(*args, **cmd_options)
File "/Users/dengwang/Code/Python/gene/xadmin-server/.venv/lib/python3.11/site-packages/django/contrib/auth/management/commands/createsuperuser.py", line 89, in execute
return super().execute(*args, **options)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/dengwang/Code/Python/gene/xadmin-server/.venv/lib/python3.11/site-packages/django/core/management/base.py", line 459, in execute
output = self.handle(*args, **options)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/dengwang/Code/Python/gene/xadmin-server/.venv/lib/python3.11/site-packages/django/contrib/auth/management/commands/createsuperuser.py", line 238, in handle
self.UserModel._default_manager.db_manager(database).create_superuser(
File "/Users/dengwang/Code/Python/gene/xadmin-server/.venv/lib/python3.11/site-packages/django/contrib/auth/models.py", line 172, in create_superuser
return self._create_user(username, email, password, **extra_fields)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/dengwang/Code/Python/gene/xadmin-server/.venv/lib/python3.11/site-packages/django/contrib/auth/models.py", line 155, in _create_user
user.save(using=self.db)
File "/Users/dengwang/Code/Python/gene/xadmin-server/.venv/lib/python3.11/site-packages/django/contrib/auth/base_user.py", line 78, in save
super().save(*args, **kwargs)
File "/Users/dengwang/Code/Python/gene/xadmin-server/.venv/lib/python3.11/site-packages/django/db/models/base.py", line 822, in save
self.save_base(
File "/Users/dengwang/Code/Python/gene/xadmin-server/.venv/lib/python3.11/site-packages/django/db/models/base.py", line 924, in save_base
post_save.send(
File "/Users/dengwang/Code/Python/gene/xadmin-server/.venv/lib/python3.11/site-packages/django/dispatch/dispatcher.py", line 189, in send
response = receiver(signal=self, sender=sender, **named)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/dengwang/Code/Python/gene/xadmin-server/system/utils/signal_handler.py", line 171, in clean_cache_handler
invalid_user_cache(instance.pk)
File "/Users/dengwang/Code/Python/gene/xadmin-server/system/utils/signal_handler.py", line 110, in invalid_user_cache
cache_response.invalid_cache(f'UserInfoView_retrieve{user_pk}')
File "/Users/dengwang/Code/Python/gene/xadmin-server/common/base/magic.py", line 215, in invalid_cache
for delete_key in cache.iter_keys(cache_key):
File "/Users/dengwang/Code/Python/gene/xadmin-server/.venv/lib/python3.11/site-packages/django_redis/client/default.py", line 688, in iter_keys
for item in client.scan_iter(match=pattern, count=itersize):
File "/Users/dengwang/Code/Python/gene/xadmin-server/.venv/lib/python3.11/site-packages/redis/commands/core.py", line 3051, in scan_iter
cursor, data = self.scan(
^^^^^^^^^^
File "/Users/dengwang/Code/Python/gene/xadmin-server/.venv/lib/python3.11/site-packages/redis/commands/core.py", line 3026, in scan
return self.execute_command("SCAN", *pieces, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/dengwang/Code/Python/gene/xadmin-server/.venv/lib/python3.11/site-packages/redis/client.py", line 540, in execute_command
conn = self.connection or pool.get_connection(command_name, **options)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/dengwang/Code/Python/gene/xadmin-server/.venv/lib/python3.11/site-packages/redis/connection.py", line 1104, in get_connection
connection.connect()
File "/Users/dengwang/Code/Python/gene/xadmin-server/.venv/lib/python3.11/site-packages/redis/connection.py", line 288, in connect
self.on_connect()
File "/Users/dengwang/Code/Python/gene/xadmin-server/.venv/lib/python3.11/site-packages/redis/connection.py", line 354, in on_connect
auth_response = self.read_response()
^^^^^^^^^^^^^^^^^^^^
File "/Users/dengwang/Code/Python/gene/xadmin-server/.venv/lib/python3.11/site-packages/redis/connection.py", line 512, in read_response
response = self._parser.read_response(disable_decoding=disable_decoding)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/dengwang/Code/Python/gene/xadmin-server/.venv/lib/python3.11/site-packages/redis/_parsers/resp2.py", line 15, in read_response
result = self._read_response(disable_decoding=disable_decoding)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/dengwang/Code/Python/gene/xadmin-server/.venv/lib/python3.11/site-packages/redis/_parsers/resp2.py", line 25, in _read_response
raw = self._buffer.readline()
^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/dengwang/Code/Python/gene/xadmin-server/.venv/lib/python3.11/site-packages/redis/_parsers/socket.py", line 115, in readline
self._read_from_socket()
File "/Users/dengwang/Code/Python/gene/xadmin-server/.venv/lib/python3.11/site-packages/redis/_parsers/socket.py", line 68, in _read_from_socket
raise ConnectionError(SERVER_CLOSED_CONNECTION_ERROR)
redis.exceptions.ConnectionError: Connection closed by server.
(.venv) dengwang@dengwangs-MacBook-Pro xadmin-server %
`
1、部门管理中,归属部门为空的行,列表中状态开关切换报错;
parent = BasePrimaryKeyRelatedField(queryset=models.DeptInfo.objects, allow_null=True)
修改为
parent = BasePrimaryKeyRelatedField(queryset=models.DeptInfo.objects, allow_null=True, required=False)
后正常;
2、角色权限、数据权限,列表中状态开关切换报错;
暂不知道上述修改有啥影响,其他没看,感觉类似的功能似乎都可能存在问题。
非常感谢大佬的开源,有关后端部分,希望大佬也出份文档说明一下
数据归属有时候会归属于多个部门以及多人,甚至查看和编辑都是分属不同组和人员的
打个比方有一条数据,3个部门可以看到,其中2个部门可以编辑,除了部门外,另外3个人可以看到,其中俩个人可以编辑,如下:
a部门、b部门、c部门、张三、李四、王五可以看这条数据。
但是只有a部门、b部门、张三、李四可以修改这条数据。
我的理解是:
当前要实现上方需求,需要基于数据在数据权限中定义id_exact具体的值来选中具体数据, 然后找到对应的用户去设置此数据权限。
不知我理解的当前项目是否是这样运行的。
此处有两个疑问:
class DbAuditModel(DbBaseModel):
creator = models.ForeignKey(to=settings.AUTH_USER_MODEL, related_query_name='creator_query', null=True, blank=True,
verbose_name='创建人', on_delete=models.SET_NULL, related_name='+')
modifier = models.ForeignKey(to=settings.AUTH_USER_MODEL, related_query_name='modifier_query', null=True,
blank=True, verbose_name='修改人', on_delete=models.SET_NULL, related_name='+')
dept_belong = models.ForeignKey(to="system.DeptInfo", related_query_name='dept_belong_query', null=True, blank=True,
verbose_name='数据归属部门', on_delete=models.SET_NULL, related_name='+')
class Meta:
abstract = True
建议新增几个字段
然后在数据新增的时候,都添加一个选择对应可见人员、可编辑人员的选项(默认值为当前用户,以及当前用户所属的所有部门,用户可以点选修改),如下图,只列出了可见范围设置:
这样就可以通过对这4个字段来校验用户是否具有查看、编辑权限
判定逻辑:
或者是否是我理解项目有问题,目前可以通过其他配置解决此问题?
望回复~
接口加载耗时,目前在本地跑的结果,感觉登录和页面访问加载比较慢?这个是因为后台数据权限校验导致的吗?
目前系统的权限校验是否有文档呢?
(.venv) dengwang@dengwangs-MacBook-Pro xadmin-server % python manage.py load_init_json
System check identified some issues:
WARNINGS:
system.DataPermission.menu: (fields.W340) null has no effect on ManyToManyField.
system.DeptInfo.roles: (fields.W340) null has no effect on ManyToManyField.
system.DeptInfo.rules: (fields.W340) null has no effect on ManyToManyField.
system.FieldPermission.field: (fields.W340) null has no effect on ManyToManyField.
system.Menu.model: (fields.W340) null has no effect on ManyToManyField.
system.NoticeMessage.notice_dept: (fields.W340) null has no effect on ManyToManyField.
system.NoticeMessage.notice_role: (fields.W340) null has no effect on ManyToManyField.
system.NoticeMessage.notice_user: (fields.W340) null has no effect on ManyToManyField.
system.UserInfo.roles: (fields.W340) null has no effect on ManyToManyField.
system.UserInfo.rules: (fields.W340) null has no effect on ManyToManyField.
system.UserRole.menu: (fields.W340) null has no effect on ManyToManyField.
Traceback (most recent call last):
File "/Users/dengwang/Code/Python/gene/xadmin-server/manage.py", line 22, in
main()
File "/Users/dengwang/Code/Python/gene/xadmin-server/manage.py", line 18, in main
execute_from_command_line(sys.argv)
File "/Users/dengwang/Code/Python/gene/xadmin-server/.venv/lib/python3.11/site-packages/django/core/management/init.py", line 442, in execute_from_command_line
utility.execute()
File "/Users/dengwang/Code/Python/gene/xadmin-server/.venv/lib/python3.11/site-packages/django/core/management/init.py", line 436, in execute
self.fetch_command(subcommand).run_from_argv(self.argv)
File "/Users/dengwang/Code/Python/gene/xadmin-server/.venv/lib/python3.11/site-packages/django/core/management/base.py", line 413, in run_from_argv
self.execute(*args, **cmd_options)
File "/Users/dengwang/Code/Python/gene/xadmin-server/.venv/lib/python3.11/site-packages/django/core/management/base.py", line 459, in execute
output = self.handle(*args, **options)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/dengwang/Code/Python/gene/xadmin-server/system/management/commands/load_init_json.py", line 34, in handle
super(Command, self).handle(fixture_labels, **options)
File "/Users/dengwang/Code/Python/gene/xadmin-server/.venv/lib/python3.11/site-packages/django/core/management/commands/loaddata.py", line 102, in handle
self.loaddata(fixture_labels)
File "/Users/dengwang/Code/Python/gene/xadmin-server/.venv/lib/python3.11/site-packages/django/core/management/commands/loaddata.py", line 163, in loaddata
self.load_label(fixture_label)
File "/Users/dengwang/Code/Python/gene/xadmin-server/.venv/lib/python3.11/site-packages/django/core/management/commands/loaddata.py", line 253, in load_label
if self.save_obj(obj):
^^^^^^^^^^^^^^^^^^
File "/Users/dengwang/Code/Python/gene/xadmin-server/.venv/lib/python3.11/site-packages/django/core/management/commands/loaddata.py", line 209, in save_obj
obj.save(using=self.using)
File "/Users/dengwang/Code/Python/gene/xadmin-server/.venv/lib/python3.11/site-packages/django/core/serializers/base.py", line 265, in save
models.Model.save_base(self.object, using=using, raw=True, **kwargs)
File "/Users/dengwang/Code/Python/gene/xadmin-server/.venv/lib/python3.11/site-packages/django/db/models/base.py", line 924, in save_base
post_save.send(
File "/Users/dengwang/Code/Python/gene/xadmin-server/.venv/lib/python3.11/site-packages/django/dispatch/dispatcher.py", line 189, in send
response = receiver(signal=self, sender=sender, **named)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/dengwang/Code/Python/gene/xadmin-server/system/utils/signal_handler.py", line 134, in clean_cache_handler
cache_response.invalid_cache('MenuView_list_')
File "/Users/dengwang/Code/Python/gene/xadmin-server/common/base/magic.py", line 215, in invalid_cache
for delete_key in cache.iter_keys(cache_key):
File "/Users/dengwang/Code/Python/gene/xadmin-server/.venv/lib/python3.11/site-packages/django_redis/client/default.py", line 688, in iter_keys
for item in client.scan_iter(match=pattern, count=itersize):
File "/Users/dengwang/Code/Python/gene/xadmin-server/.venv/lib/python3.11/site-packages/redis/commands/core.py", line 3051, in scan_iter
cursor, data = self.scan(
^^^^^^^^^^
File "/Users/dengwang/Code/Python/gene/xadmin-server/.venv/lib/python3.11/site-packages/redis/commands/core.py", line 3026, in scan
return self.execute_command("SCAN", *pieces, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/dengwang/Code/Python/gene/xadmin-server/.venv/lib/python3.11/site-packages/redis/client.py", line 540, in execute_command
conn = self.connection or pool.get_connection(command_name, **options)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/dengwang/Code/Python/gene/xadmin-server/.venv/lib/python3.11/site-packages/redis/connection.py", line 1104, in get_connection
connection.connect()
File "/Users/dengwang/Code/Python/gene/xadmin-server/.venv/lib/python3.11/site-packages/redis/connection.py", line 288, in connect
self.on_connect()
File "/Users/dengwang/Code/Python/gene/xadmin-server/.venv/lib/python3.11/site-packages/redis/connection.py", line 354, in on_connect
auth_response = self.read_response()
^^^^^^^^^^^^^^^^^^^^
File "/Users/dengwang/Code/Python/gene/xadmin-server/.venv/lib/python3.11/site-packages/redis/connection.py", line 512, in read_response
response = self._parser.read_response(disable_decoding=disable_decoding)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/dengwang/Code/Python/gene/xadmin-server/.venv/lib/python3.11/site-packages/redis/_parsers/resp2.py", line 15, in read_response
result = self._read_response(disable_decoding=disable_decoding)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/dengwang/Code/Python/gene/xadmin-server/.venv/lib/python3.11/site-packages/redis/_parsers/resp2.py", line 25, in _read_response
raw = self._buffer.readline()
^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/dengwang/Code/Python/gene/xadmin-server/.venv/lib/python3.11/site-packages/redis/_parsers/socket.py", line 115, in readline
self._read_from_socket()
File "/Users/dengwang/Code/Python/gene/xadmin-server/.venv/lib/python3.11/site-packages/redis/_parsers/socket.py", line 68, in _read_from_socket
raise ConnectionError(SERVER_CLOSED_CONNECTION_ERROR)
redis.exceptions.ConnectionError: Problem installing fixture '/Users/dengwang/Code/Python/gene/xadmin-server/loadjson/menu.json': Connection closed by server.
(.venv) dengwang@dengwangs-MacBook-Pro xadmin-server %
请问我能否在本地windows运行服务端,我在windows系统运行时daemon部分出现了报错,请问有什么解决办法吗
File "", line 1050, in _gcd_import
File "", line 1027, in _find_and_load
File "", line 1006, in _find_and_load_unlocked
File "", line 688, in _load_unlocked
File "", line 883, in exec_module
File "", line 241, in call_with_frames_removed
File "E:\GitHub\xadmin-github\xadmin-server\common\management\commands\start.py", line 1, in
from .services.command import BaseActionCommand, Action
File "E:\GitHub\xadmin-github\xadmin-server\common\management\commands\services\command.py", line 7, in
from .utils import ServicesUtil
File "E:\GitHub\xadmin-github\xadmin-server\common\management\commands\services\utils.py", line 4, in
import daemon
File "E:\GitHub\xadmin-github\xadmin-server\venv\lib\site-packages\daemon_init.py", line 33, in
from .daemon import DaemonContext
File "E:\GitHub\xadmin-github\xadmin-server\venv\lib\site-packages\daemon\daemon.py", line 13, in
import pwd
ModuleNotFoundError: No module named 'pwd'
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.