第6回Formal Methods 勉強会で出た、RBACのモデルのお話。
こんな感じかな。
/* Role Based Access Control ロールに階層関係を追加 */ /* ユーザアカウント */ sig User { roles: set Role } /* ロール。Admin,Guestなど */ sig Role { perms: set Permission, superRoles: set Role } fact { no r:Role | r in r.^superRoles } /*割り当てられる操作。Read,Write,ReadWriteなど*/ sig Permission {} /* ロールが階層化されているため、スーパーロールのパーミッションも取得する */ fun permissions[u:User]: set Permission { u.roles.*superRoles.perms } pred addRole[u,u':User,r:Role] { u'.roles = u.roles + r } pred removeRole[u,u':User,r:Role] { u'.roles = u.roles - r } pred addPermission[r,r':Role,p:Permission] { r'.perms = r.perms + p } pred removePermission[r,r':Role,p:Permission] { r'.perms = r.perms - p } run {}