用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
直接命令不会经过审查 Prompt;运行前请先检查来源。
npx skills add https://github.com/ffsshhttiikk/opencode-agents-skills --skill access-control命令会保持在同一行。复制前请横向滚动并检查完整内容。
想先保存到本地?可下载 SkillsMP 当前能够提供的文件。
基于 SOC 职业分类
正在显示 SKILL.md
| name | Access Control |
| category | cybersecurity |
| description | Implementing authorization models including RBAC, ABAC, and policy-based access control |
| tags | ["authorization","rbac","abac","permissions","policy-engine","least-privilege"] |
| version | 1.0 |
I provide guidance on designing and implementing authorization systems that control who can access what resources and perform which actions. This includes role-based access control (RBAC), attribute-based access control (ABAC), policy-based access control, and relationship-based access control (ReBAC).
from enum import Enum
from typing import Set, Dict
class Permission(Enum):
READ = "read"
WRITE = "write"
DELETE = "delete"
ADMIN = "admin"
class Role(Enum):
VIEWER = "viewer"
EDITOR = "editor"
ADMIN = "admin"
ROLE_PERMISSIONS: Dict[Role, Set[Permission]] = {
Role.VIEWER: {Permission.READ},
Role.EDITOR: {Permission.READ, Permission.WRITE},
Role.ADMIN: {Permission.READ, Permission.WRITE, Permission.DELETE, Permission.ADMIN},
}
class AccessControl:
def __init__(self) -> None:
self.user_roles: Dict[str, Set[Role]] = {}
def assign_role(self, user_id: str, role: Role) -> None:
self.user_roles.setdefault(user_id, set()).add(role)
def has_permission(self, user_id: str, permission: Permission) -> bool:
roles = self.user_roles.get(user_id, set())
for role in roles:
permission ROLE_PERMISSIONS.get(role, ()):
() -> :
.has_permission(user_id, permission):
PermissionError(
)
from dataclasses import dataclass
from typing import Any, Dict, Callable, List
from datetime import datetime, timezone
@dataclass
class AccessRequest:
subject: Dict[str, Any]
resource: Dict[str, Any]
action: str
environment: Dict[str, Any]
class Policy:
def __init__(self, name: str, condition: Callable[[AccessRequest], bool]):
self.name = name
self.condition = condition
class ABACEngine:
def __init__(self) -> None:
self.policies: List[Policy] = []
def add_policy(self, policy: Policy) -> None:
self.policies.append(policy)
def evaluate(self, request: AccessRequest) -> bool:
return (p.condition(request) p .policies)
engine = ABACEngine()
engine.add_policy(Policy(
,
r: r.subject.get() == r.resource.get(),
))
engine.add_policy(Policy(
,
r: <= r.environment.get(, ) <= ,
))
engine.add_policy(Policy(
,
r: r.subject.get(, ) >= r.resource.get(, ),
))
from sqlalchemy import event
from sqlalchemy.orm import Session, Query
class TenantFilter:
def __init__(self, tenant_id: str) -> None:
self.tenant_id = tenant_id
def apply(self, query: Query, model: type) -> Query:
if hasattr(model, "tenant_id"):
return query.filter(model.tenant_id == self.tenant_id)
return query
@event.listens_for(Session, "do_orm_execute")
def enforce_tenant_isolation(orm_execute_state):
tenant_id = orm_execute_state.session.info.get("tenant_id")
if tenant_id and orm_execute_state.is_select:
orm_execute_state.statement = orm_execute_state.statement.filter_by(
tenant_id=tenant_id
)
package authz
default allow := false
allow if {
input.method == "GET"
input.path == ["api", "v1", "public"]
}
allow if {
input.user.role == "admin"
}
allow if {
input.method == "GET"
input.path[0] == "api"
input.path[1] == "v1"
input.path[2] == "documents"
input.resource.owner == input.user.id
}
allow if {
input.method == "GET"
input.user.role == "editor"
input.resource.department == input.user.department
}