User:Bluedeck/etc/sandbox/box1515612315922

维基百科,自由的百科全书
跳到导航 跳到搜索

所计划的unblock-zh工单系统细节,欢迎提供建议。[编辑]

项目 描述
前端 内容版权 可以由内容发布者选择,默认和中文维基站点内容版权一致,即CC-BY-SA。
软件版权 开源部分按照MIT、CC-SA 3~4开源、兼容GPL。一些组件会用到作业的内容不能开源。[1]一些内容因为其他原因不能开源。[2]
Framework 暫定vanilla
后端 安全 HTTPS、HSTS、CSP,按照mozilla observatory和SSLLAB等标准优化,域名加入HSTS preload list,preload两年或以上。CA是LetsEncrypt。HTTPS是直接跟服务器握手,不走cloudflare等提供商
Server & Hosting 待定。可能在Cloud VPS上。如果使用其他服务如Vultr或DigitalOcean VPS则自费。Node vanilla。
软件版权 部分组件开源,一些组件会用到作业的内容不能开源[1],另一些组件不能按照MIT或CC协议开源但是提供源码。各dependencies按照dependency发布者的版权协议释出。
数据结构 MySQL PostgreSQL,结构见下图。
冗余 一到两倍的冗余
域名 https://www.unblock-zh.org/ (目前是从蓝桌另外一个网站上胡乱拼凑来的内容,没有功能,也不是最后设计的样子)
内容和权限管理 数据管理 和邮件列表相同,所有管理员有管理权限。
权限设计 为了方便,权限设计和MW不同:管理员可以新增管理员,行政员可以新增行政员和删除管理员。
Dump 所有管理员可以访问除了user table外的数据库Dump。
作者管理 作者可以在提交数据后,他人查看前,修改版权协议,可以在一定时间内自行撤销提交,可以选择那些内容允许公开。但是为了防止spam,需要管理员确认后才能公开。
注册用户 不需要注册即可使用,但是管理员必须注册(废话)
易用性 美观和UX 由蓝桌设计。欢迎期待UX专业的童鞋们帮助我设计,给我提意见。
国际化 计划全面支持国际化。
CDN 目前没有使用CDN的计划。
API 位置 https://www.unblock-zh.org/api https://www.unblock-zh.org/api-dnp https://www.unblock-zh.org/api-pst
无聊功能1 可以开放API提供IRC、QQ、Telegram bot的实时监视等魔性功能。
无聊功能2 可以利用这个API整合进维基百科的某个页面(脑洞)。
  1. ^ 1.0 1.1 这样的组件一般可以在网上找到相同功能的替代品。虽然不一定是js。
  2. ^ 即使是不开源的内容,也提供源码,以及其非minify版本。bable transpile的部分,提供es6源。

Popular Q&A[编辑]

Q A
如何备份数据?(菲菇) 系统Snapshot 可以定期自動執行
手动备份 可以隨時手動執行
SQL Dump 所有管理員均可以隨時執行
API 导出(缺點:慢,優點:隨機訪問) 所有管理員可以隨時執行
为何不用toollabs?(Shizhao) 不知道会不会很难申请,另外听说性能太糟糕,我手上又有多余的资源。
由于一定程度上是代表官方,所以应该host在labs上(安亭) 似乎有道理。已经去信WMF询问相关事项。

DB 结构[编辑]

Unblozk-zh db schema.png
redesign
Unblock ours db schema 2.png
User.hasMany(Page, {foreignKey:"creator_id", targetKey:"id"});
User.hasMany(Page, {foreignKey:"editor_id", targetKey:"id"});
User.hasMany(Session, {foreignKey:"user_id", targetKey:"id"});
User.hasMany(History, {foreignKey:"user_id", targetKey:"id"});
Content.hasMany(Page, {foreignKey:"content", targetKey:"id"});
Content.hasMany(History, {foreignKey:"content", targetKey:"id"});
Page.hasMany(History, {foreignKey:"page_id", targetKey:"id"});

Page.belongsToMany(Feed, {through: "page_feed"});
Feed.belongsToMany(Page, {through: "page_feed"});

User.belongsToMany(Clearance, {through: "user_clearance"});
Clearance.belongsToMany(User, {through: "user_clearance"});

History.belongsToMany(Clearance, {through: "history_clearance"});
Clearance.belongsToMany(History, {through: "history_clearance"});
maintenance_bot db rights
Table name Ins Upd Sel Del
clearances no no yes no
contents yes no yes no
feeds yes yes yes no
histories yes no yes no
history_clearance yes no yes yes
notifications yes yes yes no
pages yes yes yes no
sessions yes yes yes yes
user_clearance no no yes no
users yes yes yes no
use db1;

grant select on db1.* to maintenance_bot@localhost;
    
grant insert on db1.contents to maintenance_bot@localhost;
grant insert on db1.feeds to maintenance_bot@localhost;
grant insert on db1.histories to maintenance_bot@localhost;
grant insert on db1.history_clearance to maintenance_bot@localhost;
grant insert on db1.notifications to maintenance_bot@localhost;
grant insert on db1.pages to maintenance_bot@localhost;
grant insert on db1.sessions to maintenance_bot@localhost;
grant insert on db1.users to maintenance_bot@localhost;

grant update on db1.feeds to maintenance_bot@localhost;
grant update on db1.notifications to maintenance_bot@localhost;
grant update on db1.pages to maintenance_bot@localhost;
grant update on db1.sessions to maintenance_bot@localhost;
grant update on db1.users to maintenance_bot@localhost;

grant delete on db1.history_clearance to maintenance_bot@localhost;
grant delete on db1.sessions to maintenance_bot@localhost;

init script