crabgrass-core

OverView

Crabgrass was never designed to be radically altered for different installations, but this is how people are using it. Crabgrass-core is a total rewrite of the view and controller code with the goal of making it really easy to customize the behavior of the application. Furthermore we are re-writing the permission model.

Design goals for crabgrass-core

  • create a powerful, stable, and well defined API for customizing themes and mods.
  • create a minimalist UI with the basic features needed for crabgrass. At every turn, do what is most clean and simple for now, and allow different installations to remove or enhance the feature if desired.
  • refactor the helper code and the base controller code to provide more logical and simple support for error reporting, permissions, etc.
  • make it super easy to install crabgrass-core and make sure it works on a variety of platforms.
  • create a flexible permissions model for groups, networks and people.

you can get the crabgrass-core repository from labs.riseup.net:crabgrass-core.git

Details

Code has been moved out of the core and is being re-added, reviewed, and reworked one bit at a time. Things taken out will either be added back to the core or put outside the core.

Added Back to Core

Rails upgrade

  • crabgrass-core is being built in rails 2.3.x
  • FIXME (something here about engines vs mods and core using RoR standards. this wik
    lays out how pre-core cg mods worked. i believe for core-crabgrass we are using more standard rails structures.)

Permissions Rework

  • This is a deep rework of the models underlying the permissions system to allow for a much more flexile and powerful permissions. We’re moving the permissions flags like “may_pester” out of the profiles and into a separate model. Then you can grant each of these permissions to a certain entity such as your friends or members of a particular group. This way we can even map the permissions a council has on its group.
  • This also means moving away from having the permissions policy in the controller permissions and instead moves them into the model creation. For example … we used to check if the current user is a member of the groups committee for administration. Now we will grant administration rights to everyone in the group committee upon creation and check for the administration rights when needed.
  • for the initial work the behavior of permissions will remain the same.

Mods

  • The way mods define hooks now is really limited. Version strings will be used to show a break in backwards compatibility.

Theming System

  • Theming wiki
  • this is mostly done.
  • the system allows flexibility without ability to break the html. you can customize a lot of the css, but you wont touch the selectors without digging.
  • part of the theming is a flexible navigation system. Navigation has been abstracted allowing themes to define the entire navigation hierarchy.
  • part of the theming is is a set of toggle options, things you can turn on or off, like for example full width masthead or no.

Default UI

  • Along with the themeing system rework a large UI rework is underway.
  • CSS work is being done to create an out of the box UI that can be customized.
  • The changes will be used by riseup, and the theming system will allow current installations to keep their UI / design if so desired.

Pages

Search

  • path_finder: rework to resolve inconsistencies between the mysql and sphinx searching.
  • reworking the search UI.

Alert system

  • re-writing alert system. alerts fade away or can be x-ed out.

Me-Sections

  • updating the controllers that control the me-sections in a way that models how controllers in general are written for crabgrass.

Moved out of Core

Yet to be touched

Are these going back into the core? are they being reworked for 0.9?

  • Networks
  • Committees
  • Profiles
  • Directories
  • Chat

Install Notes

Notes on getting a dev environment setup and/or installing crabgrass-core.

Brandon’s notes

  • blueprints gem missing when trying to run ‘rake test:units’
  • INSTALL doc does not mention sphinx install
 

can I get access to git clone labs.riseup.net:crabgrass-core.git ? — I get Permission denied (publickey).
faloona.net/brandon/bfaloona.pub (in case you need that)

 
 

hey Brandon! i am going to call you on the phone.

regarding the repo, this should work for read only access:

git clone git://labs.riseup.net/crabgrass-core.git

But I have also given your key write access if you do:

git clone gitosis@labs.riseup.net:crabgrass-core.git
 
 

at the moment, core is really rough. i had hoped to be finished with it by now, but it turns out that having a baby can really make you hypnotized by their giggles.

my hope is that it will be in much better shape in the next week.

 
 

i’m keeping a running list of issues to the documentation in the redmine issue tracker. it needs some cleaning up and organizing, which i plan to do this week. in the mean time the ticket with the install problems is here labs.riseup.net/code/issues/2662

 
 

Hi, I am very interested in your plans of how to rework permissions!

Is this the right place to follow these specific area of development – BTW I have real problems finding things in crabgrass and even more problems in deciding where to post things… however, it would be very clever to implement RBAC into crabgrass, these things do not have to be reinvented, the base work for this is already existing – many very clever heads have spent many hours thinking about groups and permissions – just google for RBAC and you will find everything you need – Ruby implementations of RBAC exist.
So many social network programmers are trying to reinvent things here and it is sad to see how much energy is wasted – most of the implementations fail with shortcomings that could be avoided, if intense research on RBAC would have been put in the first place. READ! Then think and THEN implement!

 
   

Snaky Love,
I have not looked into RBAC intensively but from what I read up quickly it’s a design strategy rather than a standart and we are following it pretty much with the current permission system (access is granted based on group memberships which corresponds to roles in RBAC).
However I have not found a recent ruby implementation of this… searching for “rbac ruby” gave me some rails libraries that are written for rails 1.1 – so about 5 years out of date. If you know sth. more recent I’d be happy to look at it to see how they work.

We have a number of special roles such as “friends of azul” that require some features I don’t expect to find in the standart RBAC – but if there are tools that match our needs I’m happy to adopt them rather than reinventing the wheel as you say.