新手问题 想给 homeland 添加一个发布话题 2 小时后禁止修改话题功能

felix1 · 2023年08月15日 · 最后由 zzz6519003 回复于 2023年08月17日 · 746 次阅读

发布 2 小时后禁止修改话题(admin 可以修改)

目前找到代码如下 想仿照这个写,但是不知道怎么传入 topic.created_at

有没有懂得帮我指导一下,十分感谢!

已经解决了,具体如下

  • setting.rb

    HOT_UPDATE_KEYS = %w[
    ...
    +   topic_delete_second
    ]
    ...
    scope :limits do
    field :rack_attack, type: :hash, default: {
      limit: 0,
      period: 3.minutes
    }
    
    field :newbie_limit_time, type: :integer, default: 0
    field :topic_create_limit_interval, type: :integer, default: 0
    field :topic_create_hour_limit_count, type: :integer, default: 0
    +    field :topic_delete_second, type: :integer, default: 0
    end
    
  • application_helper.rb 新增一个函数

+  def time_edit(time)
+    return false if time.blank?
+    return true if Setting.topic_delete_second == 0
+    time.to_i +  Setting.topic_delete_second.to_i  > Time.now.to_i
+  end
  • ability.rb
  def roles_for_topics
    unless user.newbie?
      can :create, Topic
    end
    can %i[favorite unfavorite follow unfollow], Topic
-    can %i[update open close], Topic, user_id: user.id
+    can %i[open close], Topic, user_id: user.id
    can :change_node, Topic, user_id: user.id, lock_node: false
+    can :update, Topic do |topic|
+      can_update = Setting.topic_delete_second == 0 ? true: ( topic.created_at.to_i + Setting.topic_delete_second.to_i > Time.now.to_i)
+      topic.user_id == user.id && can_update
+    end
    can :destroy, Topic do |topic|
      topic.user_id == user.id && topic.replies_count == 0
    end
  end
  • 剩下的就是在按钮处调用 time_edit 这个函数判断是否有权限修改

  • 最后在 admin 后台管理设置时间就可以了

看函数名,貌似不是这里

按照你的需求,限制不应该加这里吧?
你圈住这个方法看上去是判断是否新账号而已
你再想想限制应该加哪,想清楚你的那个疑问就没有了

xeruzo 回复

谢谢 暂时解决了 在修改按钮处加了判断时间的语句
不过这样不能防止用户手动输入修改的链接地址

  1. app/models/topic.rb 里面新增一个 can_edit? 函数,判断条件自行实现。
  2. 在 HTML 对应编辑按钮处,根据这个函数 true or false 来决定是否展示。
  3. app/controllers/topics_controller.rbeditupdate 函数内,增加 can_edit? 的判断。

由于这个限制不需要那么的严谨,仅在 controller 里面限制即可,不需改 Model 里面的逻辑。

敲了 我刚发一个话题 觉得标题不明确 改好了

需要 登录 后方可回复, 如果你还没有账号请 注册新账号