mirror of
https://github.com/Gozargah/Marzban.git
synced 2026-05-17 00:25:53 +03:00
Users: filter by admin username added
Details: - `crud.py`'s get_users(): `admin` param replaced by `admins`. - get_users() view: owner(admin) param added. - list_users command: multiple admin search added. - CLI docs re-generated.
This commit is contained in:
@@ -121,7 +121,7 @@ def get_users(db: Session,
|
||||
search: Optional[str] = None,
|
||||
status: Optional[Union[UserStatus, list]] = None,
|
||||
sort: Optional[List[UsersSortingOptions]] = None,
|
||||
admin: Optional[Admin] = None,
|
||||
admins: Optional[List[str]] = None,
|
||||
reset_strategy: Optional[Union[UserDataLimitResetStrategy, list]] = None,
|
||||
return_with_count: bool = False) -> Union[List[User], Tuple[List[User], int]]:
|
||||
query = db.query(User)
|
||||
@@ -147,8 +147,8 @@ def get_users(db: Session,
|
||||
else:
|
||||
query = query.filter(User.data_limit_reset_strategy == reset_strategy)
|
||||
|
||||
if admin:
|
||||
query = query.filter(User.admin == admin)
|
||||
if admins:
|
||||
query = query.filter(User.admin.has(Admin.username.in_(admins)))
|
||||
|
||||
# count it before applying limit and offset
|
||||
if return_with_count:
|
||||
|
||||
@@ -222,6 +222,7 @@ def get_users(offset: int = None,
|
||||
limit: int = None,
|
||||
username: List[str] = Query(None),
|
||||
search: Union[str, None] = None,
|
||||
owner: Union[list[str], None] = Query(None, alias="admin"),
|
||||
status: UserStatus = None,
|
||||
sort: str = None,
|
||||
db: Session = Depends(get_db),
|
||||
@@ -229,8 +230,6 @@ def get_users(offset: int = None,
|
||||
"""
|
||||
Get all users
|
||||
"""
|
||||
dbadmin = crud.get_admin(db, admin.username)
|
||||
|
||||
if sort is not None:
|
||||
opts = sort.strip(',').split(',')
|
||||
sort = []
|
||||
@@ -248,7 +247,7 @@ def get_users(offset: int = None,
|
||||
usernames=username,
|
||||
status=status,
|
||||
sort=sort,
|
||||
admin=dbadmin if not admin.is_sudo else None,
|
||||
admins=owner if admin.is_sudo else [admin.username],
|
||||
return_with_count=True)
|
||||
|
||||
return {"users": users, "total": count}
|
||||
|
||||
@@ -273,7 +273,7 @@ $ user list [OPTIONS]
|
||||
* `-u, --username TEXT`: Search by username(s)
|
||||
* `-s, --search TEXT`: Search by username/note
|
||||
* `--status [active|disabled|limited|expired|on_hold]`
|
||||
* `--admin, --owner TEXT`: Search by owner admin's username
|
||||
* `--admin, --owner TEXT`: Search by owner admin's username(s)
|
||||
* `--help`: Show this message and exit.
|
||||
|
||||
### `user set-owner`
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
from typing import List, Optional
|
||||
from typing import Optional
|
||||
|
||||
import typer
|
||||
from rich.table import Table
|
||||
@@ -16,10 +16,10 @@ app = typer.Typer(no_args_is_help=True)
|
||||
def list_users(
|
||||
offset: Optional[int] = typer.Option(None, *utils.FLAGS["offset"]),
|
||||
limit: Optional[int] = typer.Option(None, *utils.FLAGS["limit"]),
|
||||
username: Optional[List[str]] = typer.Option(None, *utils.FLAGS["username"], help="Search by username(s)"),
|
||||
username: Optional[list[str]] = typer.Option(None, *utils.FLAGS["username"], help="Search by username(s)"),
|
||||
search: Optional[str] = typer.Option(None, *utils.FLAGS["search"], help="Search by username/note"),
|
||||
status: Optional[crud.UserStatus] = typer.Option(None, *utils.FLAGS["status"]),
|
||||
admin: Optional[str] = typer.Option(None, "--admin", "--owner", help="Search by owner admin's username")
|
||||
admins: Optional[list[str]] = typer.Option(None, *utils.FLAGS["admin"], help="Search by owner admin's username(s)")
|
||||
):
|
||||
"""
|
||||
Displays a table of users
|
||||
@@ -30,7 +30,7 @@ def list_users(
|
||||
users: list[User] = crud.get_users(
|
||||
db=db, offset=offset, limit=limit,
|
||||
usernames=username, search=search, status=status,
|
||||
admin=crud.get_admin(db, admin) if admin else None
|
||||
admins=admins
|
||||
)
|
||||
|
||||
utils.print_table(
|
||||
|
||||
@@ -17,6 +17,7 @@ PASSWORD_ENVIRON_NAME = "MARZBAN_ADMIN_PASSWORD"
|
||||
FLAGS: Dict[str, tuple] = {
|
||||
"username": ("--username", "-u"),
|
||||
"search": ("--search", "-s"),
|
||||
"admin": ("--admin", "--owner"),
|
||||
"limit": ("--limit", "-l"),
|
||||
"offset": ("--offset", "-o"),
|
||||
"yes_to_all": ("--yes", "-y"),
|
||||
|
||||
Reference in New Issue
Block a user