タイトルが悪くてすみません。適切に実行され、希望どおりに挿入を作成するクエリ (以下) があります。ただし、3つの列の正確な組み合わせの場合にのみ挿入することで、よりスマートにしたいと考えています。基本的に、3 列のタプルは主キーですが、sqlite の単一の主キーの制限に取り組んでいます。
基本的なコンテキスト 4 つのテーブルがあります: アクセス許可、ロール、ユーザー、アクション アクセス許可は、ロールとユーザーをアクションに接続します。アクション テーブルには、ユーザーまたは役割を持つユーザーが実行できる利用可能なタスクのリストがあります。たとえば、user_id = 1 が list_folder アクション (action_id = 1) を実行できる場合、権限テーブルには次のエントリがあります: (id=1, action_id=1, user_id=1, role_id=NULL)。同様に、owner_role (role_id=1) が list_folder アクション (action_id=1) を実行する権限を持っている場合、権限エントリは次のようになります: (id=2, action_id=1, user_id=NULL, role_id=1)。
挿入を行うとき、正確な組み合わせ (action_id=1、user_id=NULL、role_id=1 など) をまだ持っていないことを確認したいと考えています。そして、このセットアップを適切に行うためにSQLを記述する方法が完全にはわかりません。
これが私の基本的な挿入ステートメントです。挿入ステートメントと置換ステートメントを考え出す必要があります。
INSERT INTO permissions (
action_id
,role_id
)
SELECT DISTINCT
a.id as "action_id"
,r.id as "role_id"
FROM tmp_permissions tmp
LEFT OUTER JOIN actions a
ON tmp.action_name = a.name
LEFT OUTER JOIN roles r
ON tmp.roles_name = r.name
LEFT OUTER JOIN permissions p
ON p.role_id
テーブルの作成 SQL ステートメントを次に示します。
CREATE TABLE permissions (
id INTEGER NOT NULL,
enabled INTEGER,
action_id INTEGER,
user_id INTEGER,
role_id INTEGER,
PRIMARY KEY (id),
FOREIGN KEY(user_id) REFERENCES users (id),
FOREIGN KEY(action_id) REFERENCES actions (id),
FOREIGN KEY(role_id) REFERENCES roles (id)
);
CREATE TABLE actions (
id INTEGER NOT NULL,
enabled INTEGER,
name VARCHAR(50),
permission_ids INTEGER,
PRIMARY KEY (id),
FOREIGN KEY(permission_ids) REFERENCES permissions (id)
);
CREATE TABLE roles (
id INTEGER NOT NULL,
enabled INTEGER,
name VARCHAR(50),
permission_ids INTEGER,
PRIMARY KEY (id),
FOREIGN KEY(permission_ids) REFERENCES permissions (id)
);
CREATE TABLE users (
id INTEGER NOT NULL,
enabled INTEGER,
name VARCHAR(50),
permission_ids INTEGER,
PRIMARY KEY (id),
FOREIGN KEY(permission_ids) REFERENCES permissions (id)
);
作業中にテーブルにデータを格納するために使用している一時テーブルを次に示します。
ここにいくつかのデータがあります:
#role|action
admin|setup
admin|debug
admin|login
admin|view_user
manager|view_employee
manager|enroll_employee
manager|login
employee|schedule
employee|login
customer|guest_login
customer|change_credentials
guest|guest_login
前もって感謝します!