diff --git a/README.md b/README.md index fe4a03eb76c48d2e0d2a16c9fd81c835a1f138d5..b9db3f60e37e3a3a63f3f79042417bd31555c959 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# C3Lingo rescheduled +# c3lingo re:scheduled > Rapid assignment of shifts for chaos events @@ -7,7 +7,7 @@ ### Features - **Automatic schedule import** for re:publica, Pretalx/Hub -- **Integrations** with [C3Lingo Filedrop](https://github.com/c3lingo/c3t-drop), [Engelsystem](https://github.com/engelsystem/engelsystem) and more +- **Integrations** with [c3lingo Filedrop](https://github.com/c3lingo/c3t-drop), [Engelsystem](https://github.com/engelsystem/engelsystem) and more - **Collaborate live** on session changes using websockets - **One-click assignment** of angels - **Express interest** (with optional note) for sessions @@ -19,6 +19,9 @@ - **Manage source and target languages** per angel and per session - **Dark mode** and (mostly) responsive web app - **Statistics and leaderboards** +- **Role-based access control** with flexible permissions +- **Admin interface** for managing users, roles, and conferences +- **Import history** with error tracking for conference data - ... and more 🎁 ### Technologies: @@ -26,13 +29,15 @@ - [Ruby on Rails](https://rubyonrails.org/) with [SQLite](https://sqlite.org/) DB - [Tailwind CSS](https://tailwindcss.com/) - [Turbo](https://turbo.hotwired.dev/) + [Stimulus](https://stimulus.hotwired.dev/) -- [ActionCables](https://guides.rubyonrails.org/action_cable_overview.html) with [Redis](https://redis.io/) backend +- [ActionCable](https://guides.rubyonrails.org/action_cable_overview.html) with [Redis](https://redis.io/) backend +- [Devise](https://github.com/heartcombo/devise) for authentication +- [SolidQueue](https://github.com/rails/solid_queue) for background jobs ## Dev environment The project comes with a devcontainer for VSCode and compatible editors. Simply open the project folder in Code (or using `devcontainer open <path>`) and after a few seconds, a suitable container should be ready. -Run `bin/dev` in the integrated terminal to start the dev webserver and the tailwind watch job (see `Procfile.dev` for details). Access your local rescheduled at http://127.0.0.1:3000. +Run `bin/dev` in the integrated terminal to start the dev webserver and the tailwind watch job (see `Procfile.dev` for details). Access your local re:scheduled at http://127.0.0.1:3000. ## Secrets @@ -46,25 +51,79 @@ The application requires some secrets, as of writing these include: You can supply the secrets by running `rails credentials:edit` or pass them as environment variable in upper case (e.g. `FILEDROP_USER`). -## Preparation for an event +## User and Role Management -tbd. +The application uses a role-based access control system with the following main roles: +- `admin`: Full system access +- `events_admin`: Can manage conferences and related resources +- `shift_coordinator`: Can manage session assignments -- talks about seeds -- set "relevant stages" - ~~~ruby - relevant = ["Saal 1", "Saal ZIGZAG", "Saal GLITCH", "Stage HUFF", "Stage YELL", "Canceled talk"] - conf=Conference.find_by(slug: "38c3") - conf.relevant_stages=conf.stages.select { |val| relevant.include?(val[:name]) } - ~~~ -- sort stages - ~~~ruby - Stage.where(name: "Saal 1").update(weight: 10) - Stage.where(name: "Saal GLITCH").update(weight: 20) - Stage.where(name: "Saal ZIGZAG").update(weight: 30) - Stage.where(name: "Stage HUFF").update(weight: 40) - Stage.where(name: "Stage YELL").update(weight: 50) - ~~~ +### Managing Roles through the Admin UI + +Roles can be managed through the admin interface: +1. Navigate to `/admin/roles` to view all available roles +2. Click on a role to edit its permissions +3. To assign roles to users, navigate to `/admin/users` and edit the user + +### Managing Roles with Rake Tasks + +You can also use the following rake tasks to manage user roles from the command line: + +```bash +# View all users with special roles +rake admin:list + +# List all events admin users +rake admin:list_events_admins + +# Assign roles +rake admin:make_admin[user@example.com] +rake admin:make_events_admin[user@example.com] +rake admin:make_shift_coordinator[user@example.com] + +# Remove roles +rake admin:remove_admin[user@example.com] +rake admin:remove_events_admin[user@example.com] +rake admin:remove_shift_coordinator[user@example.com] +``` + +## Conference Management + +### Adding a New Conference + +Conferences can be added through the admin interface: +1. Navigate to `/admin/conferences` +2. Click on "Add New Conference" +3. Fill in the basic information (name, slug, dates, time zone) +4. Select the appropriate import job class (e.g., Pretalx, re:publica) +5. Provide the required data fields for the selected import method +6. Save the conference to initiate the data import + +### Importing and Updating Conference Data + +Conference data can be imported and updated through the admin interface: +1. Navigate to the conference details page in admin +2. Click on "Run Import Again" to start a new import +3. The import process runs in the background with real-time progress tracking +4. View the import history to see past imports and any errors + +### Setting Relevant Stages + +The admin interface provides a dedicated page for managing which stages are relevant: +1. Navigate to the conference details page in admin +2. Click on "Manage Relevant Stages" +3. Check the boxes for stages that should be considered relevant +4. Save your selection + +### Prioritizing Stages + +You can set the display order of stages through stage weights. Higher weights push stages down in the listing order: + +```ruby +Stage.where(name: "Saal 1").update(weight: 10) +Stage.where(name: "Saal GLITCH").update(weight: 20) +Stage.where(name: "Saal ZIGZAG").update(weight: 30) +``` ## In production @@ -100,16 +159,6 @@ By running `bin/rails <command>` you can trigger some helpful actions, such as ### In `rails console` -- Manually trigger sync job - ~~~ruby - FetchConferenceDataJob.perform_now("38c3") - ~~~ - -- Promote user to shiftcoordinator - ~~~ruby - User.find_by(name:"username_here").update(shiftcoordinator: true) - ~~~ - - Reset user password ~~~ruby pw = SecureRandom.alphanumeric(12) @@ -133,4 +182,4 @@ By running `bin/rails <command>` you can trigger some helpful actions, such as ## License -re:scheduled is licensed under the GNU Affero General Public License, Version 3. +re:scheduled is licensed under the GNU Affero General Public License, Version 3. \ No newline at end of file