# تجاوز user\_guardian.rb في إضافة (لا حاجة لعمل fork!)

**URL:** https://meta.discourse.org/t/overriding-user-guardian-rb-in-a-plugin-no-fork-necessary/174839
**Category:** Development
**Created:** [3 يناير 2021، 3:36ص UTC](https://meta.discourse.org/t/overriding-user-guardian-rb-in-a-plugin-no-fork-necessary/174839 "2021-01-03T03:36:43Z")
**Posts on this page:** 1
**Showing post:** 18

<div class="post-metadata">

### Author: ![leighno5](https://avatars.discourse-cdn.com/v4/letter/l/e19b73/32.png) [@leighno5](https://meta.discourse.org/u/leighno5)
#### Post date: [4 يناير 2021، 5:41ص UTC](https://meta.discourse.org/t/overriding-user-guardian-rb-in-a-plugin-no-fork-necessary/174839/18 "2021-01-04T05:41:22Z")

</div>

إذا صادف أحدكم هذا الموضوع وكان يشعر بالضياع مثلي تمامًا، فأنا أقدم لك أدناه الكود الخاص بي بعد أن نجحت في تشغيله كما هو مخطط له. لم أقوم بتعديل أي ملفات. بل قمت ببساطة بإنشاء ملف جديد باسم `plugin.rb` ووضعت فيه ما يلي:

```ruby
# name: noms
# about: يسمح للمستخدمين في الوضع المجهول بتغيير أسماء مستخدمينهم
# version: 0.1

require_dependency 'guardian'
require_dependency 'guardian/user_guardian'

class ::Guardian
end

module ::UserGuardian
  def can_edit_username?(user)
    return false if SiteSetting.sso_overrides_username?
    return true if is_staff?
    return false if SiteSetting.username_change_period <= 0
    return true if is_anonymous?
    is_me?(user) && ((user.post_count + user.topic_count) == 0 || user.created_at > SiteSetting.username_change_period.days.ago)
  end

  def can_edit_name?(user)
    return false unless SiteSetting.enable_names?
    return false if SiteSetting.sso_overrides_name?
    return true if is_staff?
    return true if is_anonymous?
    can_edit?(user)
  end
end

```

هذا الكود يقوم بتجاوز فئة [user\_guardian.rb](https://github.com/discourse/discourse/blob/master/lib/guardian/user_guardian.rb) في نواة Discourse للسماح للمستخدمين بتغيير اسم مستخدمهم واسم حساباتهم المجهولة.

إذا قمت بمقارنة ما لدي هنا بما هو موجود في ملف user\_guardian.rb في نواة Discourse، ستلاحظ وجود مجموعة من العناصر الأخرى التي لم أكن بحاجة للتعامل معها، لذا تركتها كما هي. كل ما احتجت إليه هو تعديل طريقتين فقط: `can_edit_username` و `can_edit_name` عن طريق تغيير بعض قيم الإرجاع من `false` إلى `true`، وقد تمكنت من تحقيق ما أريده.

بالتأكيد هناك تحسينات يمكن إجراؤها، ومن المرجح أن هناك ممارسات مثلى تمكنت من استنتاجها من خلال قراءة المنشورات المرتبطة هنا وفي أماكن أخرى، ولكن إذا كنت جديدًا تمامًا على لغة Ruby مثلي وتريد فقط تعديل شيء بسيط جدًا في النواة، فهذا مثال عملي مبسط لما تحتاج إلى فعله.

شكرًا جزيلًا للأشخاص في هذا الموضوع على صبرهم وتشجيعهم ومساعدتهم! وعلى وجه الخصوص إلى @merefield الذي ساعدني بالفعل في منشور آخر في الماضي.

---

_[View the full topic](https://meta.discourse.org/t/overriding-user-guardian-rb-in-a-plugin-no-fork-necessary/174839)._
