Skip to content

Commit b4a2ca4

Browse files
committed
验证权限控制有效性
修改password字段
1 parent 8829c62 commit b4a2ca4

File tree

4 files changed

+36
-6
lines changed

4 files changed

+36
-6
lines changed

fast_tmp/admin/server.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ async def login(
5858
if not password:
5959
context["password_err"] = True
6060
return templates.TemplateResponse("login.html", context)
61-
user = await User.filter(username=username).first()
61+
user = await User.filter(username=username, is_staff=True, is_active=True).first()
6262
if not user or not user.check_password(password) or not user.is_active:
6363
context["errinfo"] = "username or password error!"
6464
return templates.TemplateResponse("login.html", context)
@@ -106,7 +106,7 @@ async def get_site(request: Request):
106106
if not user.is_superuser:
107107
perms = [
108108
i.codename
109-
for i in await Permission.filter(groups__user=user, codename__endswith="list")
109+
for i in await Permission.filter(groups__users=user, codename__endswith="list")
110110
]
111111
else:
112112
perms = [i.codename for i in await Permission.filter(codename__endswith="list")]

fast_tmp/amis/forms/enums.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ class ControlEnum(str, Enum):
3131
checkboxes = "checkboxes"
3232
picker = "picker"
3333
custom = "custom"
34+
input_password = "input-password"
3435

3536

3637
class ItemModel(str, Enum):

fast_tmp/site/field.py

Lines changed: 29 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,36 @@
11
from typing import Any
22

3+
from starlette.requests import Request
4+
from tortoise import Model
5+
6+
from fast_tmp.amis.forms import Control, ControlEnum
37
from fast_tmp.contrib.auth.hashers import make_password
8+
from fast_tmp.responses import TmpValueError
49
from fast_tmp.site.util import StrControl
510

611

12+
# todo 以后考虑创建更新的control分离
713
class Password(StrControl):
8-
def amis_2_orm(self, value: Any) -> Any:
9-
return make_password(value)
14+
_control_type = ControlEnum.input_password
15+
_update_control = None
16+
17+
async def get_value(self, request: Request, obj: Model) -> Any:
18+
return None
19+
20+
async def set_value(self, request: Request, obj: Model, value: Any):
21+
if obj.pk is not None:
22+
old_password = getattr(obj, self.name)
23+
if value != old_password and len(value) > 0:
24+
setattr(obj, self.name, make_password(value))
25+
else:
26+
if not value:
27+
raise TmpValueError("password can not be none.")
28+
await super().set_value(request, obj, value)
29+
30+
def get_control(self, request: Request) -> Control:
31+
if not self._control:
32+
self._control = Control(type=self._control_type, name=self.name, label=self.label)
33+
if not self._field.null: # type: ignore
34+
if self._field.default is not None: # type: ignore
35+
self._control.value = self.orm_2_amis(self._field.default) # type: ignore
36+
return self._control

tests/base.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ async def asyncSetUp(self) -> None:
2222
self.client = AsyncClient(app=self.app, base_url="http://test")
2323
await self.client.__aenter__()
2424
await Tortoise.init(settings.TORTOISE_ORM, _create_db=True)
25-
await Tortoise.generate_schemas(False)
25+
await Tortoise.generate_schemas(True)
2626
await self.create_superuser("admin", "admin")
2727

2828
async def asyncTearDown(self) -> None:
@@ -33,7 +33,9 @@ async def asyncTearDown(self) -> None:
3333
async def create_superuser(cls, username, password):
3434
if await User.filter(username=username).exists():
3535
return
36-
user = User(username=username, is_superuser=True)
36+
user = User(
37+
username=username, is_superuser=True, is_active=True, is_staff=True, name=username
38+
)
3739
user.set_password(password)
3840
await user.save()
3941

0 commit comments

Comments
 (0)