用途:为 Phoenix 与 LiveView 应用处理授权与访问控制,包括服务器端授权、仅所有者模式、按用户作用域的查询、Policy 模块以及已授权/未授权路径测试。
主要能力与规则:始终在服务器端的事件处理函数中授权,绝不依赖仅前端的检查;通过比较 current_scope.user.id 与资源的 user_id 校验归属,绝不信任客户端传入的用户 ID;复杂授权使用 Policy 模块,不把权限检查内联到 LiveView 或控制器;破坏性 UI 操作加 data-confirm 属性;对每个修改数据的 handle_event 测试已授权与未授权两条路径;在上下文中用 where(user_id: ^user_id) 限定查询作用域以防 IDOR。
新资源授权流程:先在上下文中添加作用域查询,再定义 Policy 模块规则,然后在 LiveView 事件处理器加服务器端检查(调用 Policy.authorize/3 或比较 user.id),接着先写未授权路径测试,最后才添加 UI 控件。
检查点:每个返回或修改资源的上下文函数都按当前用户限定;Policy 模块有兜底子句返回 {:error, :unauthorized};每个修改型 handle_event 都有对应的未授权路径测试。
用法要点:上下文中用 list_user_posts、get_user_post、update_user_post 等按 user_id 过滤;Policy 模块按角色与归属匹配动作,并以 def authorize(_, _, _) 结尾兜底;LiveView 中依授权结果执行操作或 put_flash 提示 Not authorized。
限制:资料未提供依赖环境、版本要求、安装命令与具体配置细节。