[](https://github.com/OpenMined/syft-perm/actions/workflows/test.yml)
[](https://pypi.org/project/syft-perm/)
[](https://pypi.org/project/syft-perm/)
[](https://pypi.org/project/syft-perm/)
[](https://github.com/psf/black)
[](https://github.com/OpenMined/syft-perm/blob/main/LICENSE)
# SyftPerm
**File permission management for SyftBox made simple.**
SyftPerm provides intuitive Python APIs for managing SyftBox file permissions with powerful pattern matching, inheritance, and debugging capabilities.
## 📚 **[Complete Documentation](https://openmined.github.io/syft-perm/)**
## Installation
```bash
pip install syft-perm
```
## Quick Start
```python
import syft_perm as sp
# Open a file or folder
file = sp.open("my_data.txt")
# Grant permissions (higher levels include lower ones)
file.grant_read_access("reviewer@external.org")
file.grant_write_access("colleague@company.com") # Gets read + write
file.grant_admin_access("boss@company.com") # Gets everything
# Use patterns for multiple files
project = sp.open("my_project/")
project.grant_write_access("*.py", "dev@company.com")
project.grant_read_access("docs/**/*.md", "*") # Public docs
# Debug permissions
print(file.explain_permissions("colleague@company.com"))
# Check access
if file.has_write_access("colleague@company.com"):
print("Colleague can modify this file")
# Display beautiful permission tables in Jupyter notebooks
file._repr_html_() # Shows permissions table with compliance info
```
## Permission Hierarchy
- **Read** - View file contents
- **Create** - Read + create new files
- **Write** - Read + Create + modify existing files
- **Admin** - Read + Create + Write + manage permissions
## Key Features
- **🎯 Intuitive Permission Hierarchy** - Higher permissions include all lower ones
- **🌟 Powerful Pattern Matching** - Use `*.py`, `docs/**/*.md` to control multiple files
- **🔍 Nearest-Node Algorithm** - Predictable inheritance from closest permission rules
- **🐛 Built-in Debugging** - Trace exactly why permissions work or don't work
- **📁 Folder-Level Efficiency** - Set permissions once on directories, files inherit automatically
- **🎮 Interactive Web Editor** - Google Drive-style permission management interface
## Beautiful Table Display
SyftPerm provides rich table displays for Jupyter notebooks:
```python
# Display permissions table with compliance information
file._repr_html_() # Shows user permissions, file limits, and compliance status
# The table includes:
# • User permissions (Read/Create/Write/Admin)
# • File size vs limits
# • File type compliance (directories, symlinks)
# • Overall compliance status
# • Direct link to web editor
```
## Web Editor
For non-technical users, SyftPerm includes a web interface:
```python
# Get editor URL for any file or folder
url = sp.get_editor_url("my_project/")
print(f"Edit permissions at: {url}")
```
## Learn More
- **[5-Minute Quick Start](https://openmined.github.io/syft-perm/quickstart.html)** - Get productive immediately
- **[Comprehensive Tutorials](https://openmined.github.io/syft-perm/tutorials/)** - Master advanced features
- **[API Reference](https://openmined.github.io/syft-perm/api/)** - Complete Python API docs
## Requirements
- Python 3.9+
- Works on Windows, macOS, and Linux
## Contributing
1. Check out our [GitHub Issues](https://github.com/OpenMined/syft-perm/issues)
2. Read the [Contributing Guide](CONTRIBUTING.md)
3. Join the [OpenMined Community](https://openmined.org/)
## License
MIT License - see [LICENSE](LICENSE) file for details.
Raw data
{
"_id": null,
"home_page": null,
"name": "syft-perm",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.9",
"maintainer_email": null,
"keywords": "syftbox, permissions, privacy, federated-learning",
"author": null,
"author_email": "OpenMined <info@openmined.org>",
"download_url": "https://files.pythonhosted.org/packages/55/98/8a29317e8d0d9fc39e558b2fffe82632739de965fa9b1b79238c0c88fb0c/syft_perm-0.3.92.tar.gz",
"platform": null,
"description": "[](https://github.com/OpenMined/syft-perm/actions/workflows/test.yml)\n[](https://pypi.org/project/syft-perm/)\n[](https://pypi.org/project/syft-perm/)\n[](https://pypi.org/project/syft-perm/)\n[](https://github.com/psf/black)\n[](https://github.com/OpenMined/syft-perm/blob/main/LICENSE)\n\n# SyftPerm\n\n**File permission management for SyftBox made simple.**\n\nSyftPerm provides intuitive Python APIs for managing SyftBox file permissions with powerful pattern matching, inheritance, and debugging capabilities.\n\n## \ud83d\udcda **[Complete Documentation](https://openmined.github.io/syft-perm/)**\n\n## Installation\n\n```bash\npip install syft-perm\n```\n\n## Quick Start\n\n```python\nimport syft_perm as sp\n\n# Open a file or folder\nfile = sp.open(\"my_data.txt\")\n\n# Grant permissions (higher levels include lower ones)\nfile.grant_read_access(\"reviewer@external.org\")\nfile.grant_write_access(\"colleague@company.com\") # Gets read + write\nfile.grant_admin_access(\"boss@company.com\") # Gets everything\n\n# Use patterns for multiple files\nproject = sp.open(\"my_project/\")\nproject.grant_write_access(\"*.py\", \"dev@company.com\")\nproject.grant_read_access(\"docs/**/*.md\", \"*\") # Public docs\n\n# Debug permissions\nprint(file.explain_permissions(\"colleague@company.com\"))\n\n# Check access\nif file.has_write_access(\"colleague@company.com\"):\n print(\"Colleague can modify this file\")\n\n# Display beautiful permission tables in Jupyter notebooks\nfile._repr_html_() # Shows permissions table with compliance info\n```\n\n## Permission Hierarchy\n\n- **Read** - View file contents\n- **Create** - Read + create new files \n- **Write** - Read + Create + modify existing files\n- **Admin** - Read + Create + Write + manage permissions\n\n## Key Features\n\n- **\ud83c\udfaf Intuitive Permission Hierarchy** - Higher permissions include all lower ones\n- **\ud83c\udf1f Powerful Pattern Matching** - Use `*.py`, `docs/**/*.md` to control multiple files\n- **\ud83d\udd0d Nearest-Node Algorithm** - Predictable inheritance from closest permission rules\n- **\ud83d\udc1b Built-in Debugging** - Trace exactly why permissions work or don't work\n- **\ud83d\udcc1 Folder-Level Efficiency** - Set permissions once on directories, files inherit automatically\n- **\ud83c\udfae Interactive Web Editor** - Google Drive-style permission management interface\n\n## Beautiful Table Display\n\nSyftPerm provides rich table displays for Jupyter notebooks:\n\n```python\n# Display permissions table with compliance information\nfile._repr_html_() # Shows user permissions, file limits, and compliance status\n\n# The table includes:\n# \u2022 User permissions (Read/Create/Write/Admin)\n# \u2022 File size vs limits\n# \u2022 File type compliance (directories, symlinks)\n# \u2022 Overall compliance status\n# \u2022 Direct link to web editor\n```\n\n## Web Editor\n\nFor non-technical users, SyftPerm includes a web interface:\n\n```python\n# Get editor URL for any file or folder\nurl = sp.get_editor_url(\"my_project/\")\nprint(f\"Edit permissions at: {url}\")\n```\n\n## Learn More\n\n- **[5-Minute Quick Start](https://openmined.github.io/syft-perm/quickstart.html)** - Get productive immediately\n- **[Comprehensive Tutorials](https://openmined.github.io/syft-perm/tutorials/)** - Master advanced features\n- **[API Reference](https://openmined.github.io/syft-perm/api/)** - Complete Python API docs\n\n## Requirements\n\n- Python 3.9+\n- Works on Windows, macOS, and Linux\n\n## Contributing\n\n1. Check out our [GitHub Issues](https://github.com/OpenMined/syft-perm/issues)\n2. Read the [Contributing Guide](CONTRIBUTING.md)\n3. Join the [OpenMined Community](https://openmined.org/)\n\n## License\n\nMIT License - see [LICENSE](LICENSE) file for details.\n",
"bugtrack_url": null,
"license": "Apache-2.0",
"summary": "Minimal utilities for managing SyftBox file permissions",
"version": "0.3.92",
"project_urls": {
"Documentation": "https://github.com/OpenMined/syft-perm#readme",
"Homepage": "https://github.com/OpenMined/syft-perm",
"Issues": "https://github.com/OpenMined/syft-perm/issues",
"Repository": "https://github.com/OpenMined/syft-perm"
},
"split_keywords": [
"syftbox",
" permissions",
" privacy",
" federated-learning"
],
"urls": [
{
"comment_text": null,
"digests": {
"blake2b_256": "84b474cdfd2f5d25f4c154493e32ed4621a931b0bf2f0a5a7e961ddf0912f333",
"md5": "b56943267150d7ca58e869fed76c0316",
"sha256": "1b89b1e034d5eff34876664a67daa96911bb3bfe7172a03f4d7512501a79c5bd"
},
"downloads": -1,
"filename": "syft_perm-0.3.92-py3-none-any.whl",
"has_sig": false,
"md5_digest": "b56943267150d7ca58e869fed76c0316",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.9",
"size": 124814,
"upload_time": "2025-07-15T12:25:59",
"upload_time_iso_8601": "2025-07-15T12:25:59.382904Z",
"url": "https://files.pythonhosted.org/packages/84/b4/74cdfd2f5d25f4c154493e32ed4621a931b0bf2f0a5a7e961ddf0912f333/syft_perm-0.3.92-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "55988a29317e8d0d9fc39e558b2fffe82632739de965fa9b1b79238c0c88fb0c",
"md5": "321afed42e049dffbbd4b495204b9d0e",
"sha256": "2478916eb9f393a7add209e5e418e68f857d399369c0d907bc276d9f6b9e0291"
},
"downloads": -1,
"filename": "syft_perm-0.3.92.tar.gz",
"has_sig": false,
"md5_digest": "321afed42e049dffbbd4b495204b9d0e",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.9",
"size": 195441,
"upload_time": "2025-07-15T12:26:00",
"upload_time_iso_8601": "2025-07-15T12:26:00.431626Z",
"url": "https://files.pythonhosted.org/packages/55/98/8a29317e8d0d9fc39e558b2fffe82632739de965fa9b1b79238c0c88fb0c/syft_perm-0.3.92.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2025-07-15 12:26:00",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "OpenMined",
"github_project": "syft-perm#readme",
"travis_ci": false,
"coveralls": false,
"github_actions": true,
"lcname": "syft-perm"
}