当普通用户尝试执行仅限管理员的任务时询问管理员密码
Ask for admin password when an ordinary user tries to perform admin only tasks
我在 Rails 上使用 Ruby 构建了一个应用程序。我使用 Devise 进行身份验证,使用 CanCanCan 进行授权。
我的用户有两个角色,admin 和 common 用户。管理员可以执行系统上的所有操作,普通用户可以执行有限的任务。
现在,每当 普通 用户尝试做一些需要 管理员权限 的事情时,应用程序都会请求 admin 密码授权 仅该操作。
我已经对该主题进行了研究,但没有找到任何相关内容。
我想知道以前是否有人做过类似的事情以及如何做,或者您是否有其他解决方法的建议。提前致谢。
我看到的最简单的方法是为此目的在数据库中创建一个视图和一个字段。
您可以将类型为 datetime
的字段 authorized_as_admin_at
添加到 users
table。
当您意识到用户需要管理员访问权限时:
- 检查
authorized_as_admin_at
是否不超过 N hours/minutes 之前(这个方法应该在 ApplicationController
中的 before_filter
或者如果你有更多复杂的结构)。
- 如果是,允许他们为所欲为,否则:
- 在cookie中保存请求路径
- 将他们重定向到可以输入管理员凭据的页面
- 如果凭据正确,您将
autorized_as_admin_at
设置为当前时间
- 将它们重定向到存储在 cookie 中的路径。
您可以尝试在会话中存储这样的东西,但这看起来不太安全。
我在 Rails 上使用 Ruby 构建了一个应用程序。我使用 Devise 进行身份验证,使用 CanCanCan 进行授权。
我的用户有两个角色,admin 和 common 用户。管理员可以执行系统上的所有操作,普通用户可以执行有限的任务。
现在,每当 普通 用户尝试做一些需要 管理员权限 的事情时,应用程序都会请求 admin 密码授权 仅该操作。
我已经对该主题进行了研究,但没有找到任何相关内容。
我想知道以前是否有人做过类似的事情以及如何做,或者您是否有其他解决方法的建议。提前致谢。
我看到的最简单的方法是为此目的在数据库中创建一个视图和一个字段。
您可以将类型为 datetime
的字段 authorized_as_admin_at
添加到 users
table。
当您意识到用户需要管理员访问权限时:
- 检查
authorized_as_admin_at
是否不超过 N hours/minutes 之前(这个方法应该在ApplicationController
中的before_filter
或者如果你有更多复杂的结构)。 - 如果是,允许他们为所欲为,否则:
- 在cookie中保存请求路径
- 将他们重定向到可以输入管理员凭据的页面
- 如果凭据正确,您将
autorized_as_admin_at
设置为当前时间 - 将它们重定向到存储在 cookie 中的路径。
您可以尝试在会话中存储这样的东西,但这看起来不太安全。