Ok, let's say this:
Global Lock Object(#100) - This is a wizard object that you have set inherit to wizard powers and is used to store your generic locks on that are used by a lot of systems.
Staff: General Discussions(#123) - This is your board object in question.
Channel Object: Staff (#125) - The channel object for the staff channel.
&lock.staff #100=[orflags(%0,WZ)]
&canread #123=[u(#100/lock.staff,%0)]
&canwrite #123=[u(#100/lock.staff,%0)]
RE: Channels.
&canuse #125=[u(#100/lock.staff,%#)]
@lock #125=canuse/1
@lock/use #125=canuse/1
@lock/enter #125=canuse/1
NOW! This is to say I'm not sure if the @lock can handle @lock #125=#100/lock.staff/1 (I don't think it can, but been a while with mux, they have made a few changes.) So I always referenced "Canuse" on the object and reference the global lock storage object, but this is just my style. You can always keep the locks directly on the object that you want to lock. It's your choice.
Chargen/Stat Based locks.
Whatever stat system you're using I would need to know to give you an example, but if you have something like a getstat() function or whatever, you would just slap that into the lock setup I showed above and it should work.