CREATE TABLE users (
id SERIAL PRIMARY KEY,
name TEXT NOT NULL UNIQUE,
);
CREATE TABLE permissions(
id SERIAL PRIMARY KEY,
name TEXT NOT NULL,
granted BOOLEAN NOT NULL DEFAULT false
);
CREATE TABLE roles (
user_id INTEGER NOT NULL REFERENCES users,
permission_it INTEGER NOT NULL REFERENCES permissions
);
controller/application.rb
class ApplicationController < ActionController::Base
before_filter :check_permission
protected
def check_permission
method = Retrieve.the.controller.name.plus.method
begin
return true if Role.find_by_sql ["SELECT 1 FROM roles r
INNER JOIN users u
ON u.id = r.user_id
INNER JOIN permissions p
ON p.id = r.permission_id
WHERE u.id = ?
AND p.name = ?
AND p.granted IS TRUE", @me, method]
rescue ActiveRecord::RecordNotFound
end
end
end