Token导航 LogoToken导航

Agent Skill · 前端设计

access-control(访问控制)

access-control 用于处理 GitHub 仓库、Issue、Pull Request 和代码协作信息,适合在 Codex、Claude、Cursor、Gemini CLI 中需要围绕仓库状态、代码变更或协作事项进行整理时使用。可结合来源仓库、安装命令和原始 README 继续核验具体用法。安装前建议确认权限范围、维护状态,以及是否会触发联网、命令执行或文件读写。

access-control 是前端设计类 Agent Skill,可用宿主为 Codex、Claude、Cursor、Gemini CLI,通过GitHub 仓库获取,权限为接触敏感数据;许可证信息还不明确,第三方扫描已通过,按安装量在前端设计类的 10,216 个 Skill 里排第 6,450。

总安装 504周安装 21GitHub Stars 6下载 168核验 2026-05-01

安装说明

本站只整理中文说明,不托管安装包,也不代用户安装。
GitHub
许可证
unknown

安装方式

通过对话安装

复制提示词发给支持本地命令或 Skills 的 AI 助手,先确认命令和权限,再让它执行。

请帮我安装这个 Agent Skill:access-control(访问控制)
来源仓库:https://github.com/hack23/homepage
仓库路径:skills/access-control
安装命令:
npx skills add https://github.com/hack23/homepage --skill access-control
安装前请先检查当前环境是否支持对应 CLI,并向我确认将要执行的命令、安装目录、联网范围和文件读写权限;确认后再执行。

命令行安装

复制命令到本机终端执行。该命令会通过 npx skills 从第三方来源获取 Skill;本站只展示命令,不托管安装包,也不自动执行。

skills.shnpx skills
npx skills add https://github.com/hack23/homepage --skill access-control

这个 Skill 是做什么的

前端设计类 Skill 关注页面结构、视觉规范和组件写法,输出通常是可运行的界面代码。

access-control 提供基于 Hack23 ISMS 政策的访问控制规则与实施建议。适用于需要遵循最小权限原则和职责分离的信息系统权限设计场景。涵盖角色权限分配、会话管理和临时权限申请等核心安全实践指导。安装前应核对政策版本与组织要求的匹配度,确保规则符合内部合规标准。

技能输出为策略文档片段,不包含实际权限修改功能,需结合具体系统实施。

来源仓库内路径:skills/access-control

上手步骤

4 步
  1. 1

    确认自己的宿主工具

    公开资料标注支持 Codex、Claude、Cursor、Gemini CLI;先确认自己用的是其中之一,再按对应工具的 Skills 目录放置。

  2. 2

    拿到安装命令

    可以直接复制的命令是 npx skills add https://github.com/hack23/homepage --skill access-control;命令里的占位符换成自己的路径或密钥再执行。

  3. 3

    安装后重启宿主

    命令执行完要完全退出宿主工具再打开,让新装的 Skill 被重新扫描到,否则列表里可能看不到。

  4. 4

    按最小权限试用

    它需要接触敏感数据,先在测试目录或测试账号里跑,确认没问题再放到正式项目。

常见问题

6 条

access-control 怎么安装?

在终端执行 npx skills add https://github.com/hack23/homepage --skill access-control。装完完全退出宿主工具再打开,让它重新扫描本地 Skill。

access-control 支持哪些 AI 工具?

公开资料标注支持 Codex、Claude、Cursor、Gemini CLI。其他工具只要能读取本地 Skill 目录,一般也能手动放进去,但要自己确认触发方式是否一致。

access-control 需要什么权限?

权限级别是接触敏感数据。该 Skill 可能接触密钥、Token、环境变量或敏感配置,应进入高风险复核队列,默认不自动发布。

access-control 是免费的吗?

公开资料没有标注明确许可证,收费和商用限制都无法确认。正式使用前请到来源仓库核对授权说明。

access-control 用的人多吗?

公开数据是累计安装 504 次,近一周安装 21 次,下载 168 次,GitHub 6 星。这些数字来自第三方目录统计,只能当作热度参考,不代表质量或安全性。

access-control 安全吗?

第三方扫描结果为通过,但这只覆盖已知的静态检查项,不能替代自己读一遍源码和安装命令。

值得选的地方和要先想清楚的地方

值得选的地方

  • 同时适配 4 种工具,换客户端不用重新找替代品。
  • 第三方扫描已通过,常见的高风险行为没有命中。

先想清楚的地方

  • 需要接触敏感数据,装到常用环境前要先评估影响面。
  • 许可证没有明确标注,能不能商用、能不能再分发都不确定。
  • 第三方目录整理,版本更新和行为细节以来源仓库为准。

适不适合你

更适合

  • 已经在用 Codex,想直接扩展它能力的人。
  • 需要处理前端设计类任务、又不想每次都手写提示词的人。

不太适合

  • 环境里有大量密钥、凭证,不方便给第三方 Skill 读取的人。
  • 需要明确授权才能用到公司项目里的场景。
  • 需要厂商级技术支持和 SLA 的生产系统。

前端设计类 Skill 对比

6 个同类
Skill总安装GitHub 星权限许可证扫描
frontend-design

前端设计 · Codex、Claude

8,823,360126,072只读MIT通过
vercel-composition-patterns

Vercel 组合模式 · Codex、Claude

3,858,81625,893需要联网MIT通过
vercel-react-native-skills

Vercel React native skills 前端 · Codex、Claude

2,468,66425,878只读MIT通过
adapt

adapt 搜索 · Codex、Claude

2,027,04023,125操作浏览器未明确通过
bolder

bolder 分析 · Codex、Claude

2,004,28823,130只读未明确通过
access-control

访问控制 · 本页

5046接触敏感数据未明确通过

按安装量取同分类前几名;数字来自第三方目录统计,只作热度参考,不代表质量结论。

SKILL.md 原文

Access Control Skill

Purpose

This skill enforces access control requirements as defined in the Hack23 ISMS Access Control Policy. It ensures that all systems implement proper authentication, authorization, and session management based on the principle of least privilege.

Rules

Principle of Least Privilege

MUST:

  • Grant minimum permissions necessary to perform job functions
  • Default to deny access (allowlist approach)
  • Separate duties for critical functions (no single person has complete control)
  • Regularly review and revoke unnecessary permissions
  • Document permission requirements for each role
  • Implement time-limited access for temporary needs

MUST NOT:

  • Grant administrative privileges by default
  • Share user accounts between multiple people
  • Use shared service accounts without audit trails
  • Grant permanent access when temporary access is sufficient
  • Allow users to escalate their own privileges

Role-Based Access Control (RBAC)

MUST:

  • Define roles based on job functions
  • Assign permissions to roles, not individual users
  • Document role definitions and their permissions
  • Implement role hierarchy where appropriate
  • Enforce separation of duties through role conflicts
  • Review role assignments quarterly

Roles for Hack23 Projects:

  • Public: Unauthenticated users (read-only access to public content)
  • User: Authenticated regular users (basic functionality)
  • Contributor: Code contributors (read/write to repositories)
  • Maintainer: Project maintainers (merge, release, moderate)
  • Administrator: System administrators (full control, user management)
  • Security Officer: Security team (audit logs, security settings)

MUST NOT:

  • Create user-specific permissions (use roles instead)
  • Assign multiple conflicting roles to same user
  • Allow role self-assignment without approval
  • Create overly broad roles that violate least privilege

Authentication Requirements

MUST:

  • Require authentication for all non-public resources
  • Implement multi-factor authentication (MFA) for:

- Administrative accounts - Access to Confidential or Restricted data - Remote access to internal systems - Privileged operations (deployments, configuration changes)

  • Enforce strong password requirements:

- Minimum 12 characters - At least one uppercase, lowercase, number, symbol - No common passwords (check against known breached passwords) - No reuse of last 5 passwords

  • Implement account lockout after 5 failed attempts
  • Require password change every 90 days for privileged accounts
  • Terminate sessions after 30 minutes of inactivity
  • Support passwordless authentication (FIDO2/WebAuthn) where possible

MUST NOT:

  • Use basic authentication over unencrypted connections
  • Store passwords in plaintext or reversible encryption
  • Allow anonymous access to sensitive resources
  • Use weak hashing algorithms (MD5, SHA-1) for passwords
  • Implement custom authentication without security review
  • Bypass authentication for "trusted" networks

Authorization Requirements

MUST:

  • Verify authorization at every access point
  • Check permissions server-side (never rely on client-side checks)
  • Validate user permissions for each resource accessed
  • Implement attribute-based access control (ABAC) for complex policies
  • Deny access by default (fail closed)
  • Log all authorization failures
  • Enforce authorization consistently across all interfaces (web, API, CLI)

MUST NOT:

  • Assume authentication implies authorization
  • Use client-side authorization checks as primary control
  • Grant access based solely on URL/endpoint knowledge
  • Skip authorization checks for internal APIs
  • Use security through obscurity (hidden URLs don't require authentication)

Session Management

MUST:

  • Generate cryptographically random session IDs (minimum 128 bits entropy)
  • Set HTTPOnly flag on session cookies (prevent JavaScript access)
  • Set Secure flag on session cookies (HTTPS only)
  • Set SameSite=Strict or Lax on session cookies (CSRF protection)
  • Implement session timeout (30 minutes inactivity, 8 hours absolute)
  • Regenerate session ID after authentication
  • Invalidate sessions on logout
  • Store session data securely (encrypted, integrity-protected)
  • Implement concurrent session limits
  • Provide users visibility into active sessions

MUST NOT:

  • Include session IDs in URLs
  • Use predictable session IDs
  • Transmit session cookies over unencrypted connections
  • Store sensitive data in client-side storage (localStorage, sessionStorage)
  • Allow session fixation attacks
  • Share sessions across different security contexts

API Authentication

MUST:

  • Require authentication for all non-public API endpoints
  • Use OAuth 2.0 or OpenID Connect for third-party integrations
  • Implement API key rotation (at least annually)
  • Rate limit API requests to prevent abuse
  • Validate API tokens on every request
  • Use short-lived access tokens (< 1 hour) with refresh tokens
  • Scope API tokens to minimum necessary permissions

MUST NOT:

  • Include API keys in URLs or logs
  • Use long-lived API keys without rotation
  • Share API keys across multiple applications
  • Transmit API keys over unencrypted connections
  • Store API keys in client-side code

Access Reviews

MUST:

  • Review user access rights quarterly
  • Remove access for terminated employees immediately
  • Review privileged access monthly
  • Document access review results
  • Revoke unused accounts after 90 days of inactivity
  • Audit access control changes

MUST NOT:

  • Skip access reviews for "trusted" users
  • Allow indefinite access without review
  • Ignore orphaned accounts
  • Delay access revocation for terminated users

Examples

Example 1: RBAC Implementation (Node.js/Express)

// Define roles and permissions
const ROLES = {
  PUBLIC: 'public',
  USER: 'user',
  CONTRIBUTOR: 'contributor',
  MAINTAINER: 'maintainer',
  ADMIN: 'administrator'
};

const PERMISSIONS = {
  READ_PUBLIC: 'read:public',
  READ_PRIVATE: 'read:private',
  WRITE_CODE: 'write:code',
  MERGE_PR: 'merge:pr',
  MANAGE_USERS: 'manage:users',
  MANAGE_SECURITY: 'manage:security'
};

// Role to permissions mapping
const rolePermissions = {
  [ROLES.PUBLIC]: [PERMISSIONS.READ_PUBLIC],
  [ROLES.USER]: [PERMISSIONS.READ_PUBLIC, PERMISSIONS.READ_PRIVATE],
  [ROLES.CONTRIBUTOR]: [PERMISSIONS.READ_PUBLIC, PERMISSIONS.READ_PRIVATE, PERMISSIONS.WRITE_CODE],
  [ROLES.MAINTAINER]: [PERMISSIONS.READ_PUBLIC, PERMISSIONS.READ_PRIVATE, PERMISSIONS.WRITE_CODE, PERMISSIONS.MERGE_PR],
  [ROLES.ADMIN]: Object.values(PERMISSIONS) // All permissions
};

// Middleware to check permission
function requirePermission(permission) {
  return (req, res, next) => {
    // Must be authenticated
    if (!req.user) {
      return res.status(401).json({ error: 'Authentication required' });
    }

    // Get user's permissions from their role
    const userPermissions = rolePermissions[req.user.role] || [];

    // Check if user has required permission
    if (!userPermissions.includes(permission)) {
      return res.status(403).json({ error: 'Insufficient permissions' });
    }

    next();
  };
}

// Usage in routes
app.get('/api/public/data', requirePermission(PERMISSIONS.READ_PUBLIC), (req, res) => {
  // Public data endpoint
});

app.post('/api/code/commit', requirePermission(PERMISSIONS.WRITE_CODE), (req, res) => {
  // Commit code endpoint
});

app.post('/api/pr/merge', requirePermission(PERMISSIONS.MERGE_PR), (req, res) => {
  // Merge PR endpoint
});

Example 2: Secure Session Management (Express)

const session = require('express-session');
const RedisStore = require('connect-redis')(session);
const redis = require('redis');

const redisClient = redis.createClient({
  host: process.env.REDIS_HOST,
  port: process.env.REDIS_PORT,
  password: process.env.REDIS_PASSWORD
});

// GOOD: Secure session configuration
app.use(session({
  store: new RedisStore({
    client: redisClient,
    prefix: 'sess:'
  }),
  secret: process.env.SESSION_SECRET, // Strong random secret from env
  name: 'sid', // Don't use default name
  resave: false,
  saveUninitialized: false,
  rolling: true, // Reset expiry on activity
  cookie: {
    secure: true,        // HTTPS only
    httpOnly: true,      // No JavaScript access
    maxAge: 1800000,     // 30 minutes
    sameSite: 'strict',  // CSRF protection
    domain: 'hack23.com' // Explicit domain
  }
}));

// Session timeout middleware
app.use((req, res, next) => {
  if (req.session) {
    const now = Date.now();
    const lastActivity = req.session.lastActivity || now;
    const inactivityTimeout = 30 * 60 * 1000; // 30 minutes

    if (now - lastActivity > inactivityTimeout) {
      req.session.destroy();
      return res.status(401).json({ error: 'Session expired due to inactivity' });
    }

    req.session.lastActivity = now;
  }
  next();
});

// Regenerate session ID after authentication
app.post('/login', async (req, res) => {
  const { username, password } = req.body;

  const user = await authenticateUser(username, password);
  if (!user) {
    return res.status(401).json({ error: 'Invalid credentials' });
  }

  // Regenerate session to prevent fixation
  req.session.regenerate((err) => {
    if (err) {
      return res.status(500).json({ error: 'Session error' });
    }

    req.session.userId = user.id;
    req.session.role = user.role;
    req.session.lastActivity = Date.now();

    res.json({ success: true, user: { id: user.id, role: user.role } });
  });
});

// Logout
app.post('/logout', (req, res) => {
  req.session.destroy((err) => {
    if (err) {
      return res.status(500).json({ error: 'Logout failed' });
    }
    res.clearCookie('sid');
    res.json({ success: true });
  });
});

Example 3: MFA Implementation (TOTP)

const speakeasy = require('speakeasy');
const QRCode = require('qrcode');

// Enable MFA for user
app.post('/api/user/mfa/enable', requireAuth, async (req, res) => {
  const user = req.user;

  // Generate secret
  const secret = speakeasy.generateSecret({
    name: `Hack23 (${user.email})`,
    issuer: 'Hack23'
  });

  // Generate QR code
  const qrCodeUrl = await QRCode.toDataURL(secret.otpauth_url);

  // Store secret (encrypted) in database
  await db.users.update(user.id, {
    mfa_secret: encrypt(secret.base32),
    mfa_enabled: false // Not enabled until verified
  });

  res.json({
    secret: secret.base32,
    qrCode: qrCodeUrl
  });
});

// Verify and activate MFA
app.post('/api/user/mfa/verify', requireAuth, async (req, res) => {
  const { token } = req.body;
  const user = req.user;

  const userData = await db.users.findById(user.id);
  const secret = decrypt(userData.mfa_secret);

  // Verify token
  const verified = speakeasy.totp.verify({
    secret: secret,
    encoding: 'base32',
    token: token,
    window: 1 // Allow 1 step before/after for clock skew
  });

  if (!verified) {
    return res.status(400).json({ error: 'Invalid verification code' });
  }

  // Enable MFA
  await db.users.update(user.id, {
    mfa_enabled: true
  });

  res.json({ success: true });
});

// Login with MFA
app.post('/api/login', async (req, res) => {
  const { username, password, mfa_token } = req.body;

  // Verify username/password
  const user = await authenticateUser(username, password);
  if (!user) {
    return res.status(401).json({ error: 'Invalid credentials' });
  }

  // Check if MFA is enabled
  if (user.mfa_enabled) {
    if (!mfa_token) {
      return res.status(401).json({
        error: 'MFA token required',
        mfa_required: true
      });
    }

    // Verify MFA token
    const secret = decrypt(user.mfa_secret);
    const verified = speakeasy.totp.verify({
      secret: secret,
      encoding: 'base32',
      token: mfa_token,
      window: 1
    });

    if (!verified) {
      return res.status(401).json({ error: 'Invalid MFA token' });
    }
  }

  // Create session
  req.session.regenerate((err) => {
    if (err) {
      return res.status(500).json({ error: 'Session error' });
    }

    req.session.userId = user.id;
    req.session.role = user.role;

    res.json({ success: true, user: { id: user.id, role: user.role } });
  });
});

Example 4: API Key Management

const crypto = require('crypto');

// Generate API key
function generateApiKey() {
  // Generate 32 bytes (256 bits) of random data
  const key = crypto.randomBytes(32).toString('base64');
  return key;
}

// Hash API key for storage
function hashApiKey(apiKey) {
  return crypto.createHash('sha256').update(apiKey).digest('hex');
}

// Create API key with scopes
app.post('/api/keys', requireAuth, async (req, res) => {
  const { name, scopes, expiresInDays } = req.body;

  // Generate key
  const apiKey = generateApiKey();
  const hashedKey = hashApiKey(apiKey);

  // Calculate expiry
  const expiresAt = new Date();
  expiresAt.setDate(expiresAt.getDate() + (expiresInDays || 365));

  // Store hashed key
  await db.apiKeys.create({
    user_id: req.user.id,
    name: name,
    key_hash: hashedKey,
    scopes: scopes,
    expires_at: expiresAt,
    created_at: new Date()
  });

  // Return plaintext key ONCE (user must save it)
  res.json({
    apiKey: apiKey,
    name: name,
    scopes: scopes,
    expiresAt: expiresAt,
    warning: 'Save this key now. It will not be shown again.'
  });
});

// Validate API key middleware
async function validateApiKey(req, res, next) {
  const authHeader = req.headers.authorization;

  if (!authHeader || !authHeader.startsWith('Bearer ')) {
    return res.status(401).json({ error: 'API key required' });
  }

  const apiKey = authHeader.substring(7);
  const hashedKey = hashApiKey(apiKey);

  // Lookup key
  const keyRecord = await db.apiKeys.findByHash(hashedKey);

  if (!keyRecord) {
    return res.status(401).json({ error: 'Invalid API key' });
  }

  // Check expiry
  if (new Date() > keyRecord.expires_at) {
    return res.status(401).json({ error: 'API key expired' });
  }

  // Check if key is active
  if (!keyRecord.active) {
    return res.status(401).json({ error: 'API key revoked' });
  }

  // Update last used
  await db.apiKeys.updateLastUsed(keyRecord.id);

  // Attach user and scopes to request
  req.apiKey = keyRecord;
  req.user = await db.users.findById(keyRecord.user_id);

  next();
}

// Usage
app.get('/api/data', validateApiKey, requireScope('read:data'), (req, res) => {
  // API endpoint
});

Related ISMS Policies

Related Documentation

Compliance Mapping

ISO 27001:2022

  • A.5.15 Access control
  • A.5.16 Identity management
  • A.5.17 Authentication information
  • A.5.18 Access rights

NIST Cybersecurity Framework

  • PR.AC-1: Identities and credentials are issued, managed, verified, revoked
  • PR.AC-4: Access permissions and authorizations are managed
  • PR.AC-6: Identities are proofed and bound to credentials
  • PR.AC-7: Users, devices, and assets are authenticated

CIS Controls

  • Control 5: Account Management
  • Control 6: Access Control Management

平台分布

Codex

34.21%
按下载量换算57

Claude

31.08%
按下载量换算52

Cursor

21.27%
按下载量换算36

Gemini CLI

10.41%
按下载量换算17

安全审计

Gen Agent Trust Hub

通过

Socket

通过

Snyk

通过

权限和风险

接触敏感数据

该 Skill 可能接触密钥、Token、环境变量或敏感配置,应进入高风险复核队列,默认不自动发布。

安装前确认

本站仅展示第三方公开信息,不托管安装包,不提供自动安装或运行环境。安装前应自行审查源码、依赖和命令行为。目前只有一个公开来源,建议同时核对源仓库。

继续浏览同类 Skills