262 lines
6.1 KiB
Plaintext
262 lines
6.1 KiB
Plaintext
|
|
note
|
|
description : "[
|
|
CMS interface to storage
|
|
]"
|
|
date : "$Date$"
|
|
revision : "$Revision$"
|
|
|
|
deferred class
|
|
CMS_STORAGE
|
|
|
|
inherit
|
|
|
|
SHARED_LOGGER
|
|
|
|
feature {NONE} -- Initialization
|
|
|
|
initialize
|
|
do
|
|
end
|
|
|
|
feature -- Error Handling
|
|
|
|
error_handler: ERROR_HANDLER
|
|
-- Error handler.
|
|
|
|
feature -- Access: user
|
|
|
|
has_user: BOOLEAN
|
|
-- Has any user?
|
|
deferred
|
|
end
|
|
|
|
all_users: LIST [CMS_USER]
|
|
-- Possible list of users.
|
|
deferred
|
|
end
|
|
|
|
user_by_id (a_id: like {CMS_USER}.id): detachable CMS_USER
|
|
-- User with id `a_id', if any.
|
|
require
|
|
a_id > 0
|
|
deferred
|
|
ensure
|
|
same_id: Result /= Void implies Result.id = a_id
|
|
password: Result /= Void implies Result.password /= Void
|
|
end
|
|
|
|
user_by_name (a_name: like {CMS_USER}.name): detachable CMS_USER
|
|
-- User with name `a_name', if any.
|
|
require
|
|
a_name /= Void and then not a_name.is_empty
|
|
deferred
|
|
ensure
|
|
same_name: Result /= Void implies a_name ~ Result.name
|
|
password: Result /= Void implies Result.password /= Void
|
|
end
|
|
|
|
user_by_email (a_email: like {CMS_USER}.email): detachable CMS_USER
|
|
-- User with name `a_email', if any.
|
|
deferred
|
|
ensure
|
|
same_email: Result /= Void implies a_email ~ Result.email
|
|
password: Result /= Void implies Result.password /= Void
|
|
end
|
|
|
|
is_valid_credential (a_u, a_p: READABLE_STRING_32): BOOLEAN
|
|
-- Does account with username `a_username' and password `a_password' exist?
|
|
deferred
|
|
end
|
|
|
|
feature -- User Nodes
|
|
|
|
user_collaborator_nodes (a_id: like {CMS_USER}.id): LIST[CMS_NODE]
|
|
-- Possible list of nodes where the user identified by `a_id', is a collaborator.
|
|
require
|
|
a_id > 0
|
|
deferred
|
|
end
|
|
|
|
user_author_nodes (a_id: like {CMS_USER}.id): LIST[CMS_NODE]
|
|
-- Possible list of nodes where the user identified by `a_id', is the author.
|
|
require
|
|
a_id > 0
|
|
deferred
|
|
end
|
|
|
|
feature -- Change: user
|
|
|
|
save_user (a_user: CMS_USER)
|
|
-- Save user `a_user'.
|
|
deferred
|
|
end
|
|
|
|
feature -- Access: roles and permissions
|
|
|
|
user_has_permission (u: detachable CMS_USER; s: detachable READABLE_STRING_8): BOOLEAN
|
|
-- Anonymous or user `u' has permission for `s' ?
|
|
--| `s' could be "create page",
|
|
do
|
|
-- if s = Void then
|
|
-- Result := True
|
|
-- elseif u = Void then
|
|
---- Result := user_role_has_permission (anonymous_user_role, s)
|
|
-- else
|
|
-- Result := user_role_has_permission (authenticated_user_role, s)
|
|
-- if not Result and attached u.roles as l_roles then
|
|
-- across
|
|
-- l_roles as r
|
|
-- until
|
|
-- Result
|
|
-- loop
|
|
-- if attached user_role_by_id (r.item) as ur then
|
|
-- Result := user_role_has_permission (ur, s)
|
|
-- end
|
|
-- end
|
|
-- end
|
|
-- end
|
|
end
|
|
|
|
user_role_has_permission (a_role: CMS_USER_ROLE; s: READABLE_STRING_8): BOOLEAN
|
|
do
|
|
Result := a_role.has_permission (s)
|
|
end
|
|
|
|
user_role_by_id (a_id: like {CMS_USER_ROLE}.id): detachable CMS_USER_ROLE
|
|
-- User role by id `a_id', if any.
|
|
deferred
|
|
end
|
|
|
|
user_roles: LIST [CMS_USER_ROLE]
|
|
-- Possible list of user roles.
|
|
deferred
|
|
end
|
|
|
|
feature -- Change: roles and permissions
|
|
|
|
save_user_role (a_user_role: CMS_USER_ROLE)
|
|
-- Save user role `a_user_role'
|
|
deferred
|
|
end
|
|
|
|
feature -- Email
|
|
|
|
-- save_email (a_email: NOTIFICATION_EMAIL)
|
|
-- deferred
|
|
-- end
|
|
|
|
--feature -- Log
|
|
|
|
-- recent_logs (a_lower: INTEGER; a_count: INTEGER): LIST [CMS_LOG]
|
|
-- deferred
|
|
-- end
|
|
|
|
-- log (a_id: like {CMS_LOG}.id): detachable CMS_LOG
|
|
-- require
|
|
-- a_id > 0
|
|
-- deferred
|
|
-- end
|
|
|
|
-- save_log (a_log: CMS_LOG)
|
|
-- deferred
|
|
-- end
|
|
|
|
feature -- Access: Node
|
|
|
|
recent_nodes (a_lower: INTEGER; a_count: INTEGER): LIST [CMS_NODE]
|
|
-- List of recent `a_count' nodes with an offset of `lower'.
|
|
deferred
|
|
end
|
|
|
|
node (a_id: INTEGER_64): detachable CMS_NODE
|
|
-- Retrieve node by id `a_id', if any.
|
|
require
|
|
a_id > 0
|
|
deferred
|
|
end
|
|
|
|
node_author (a_id: like {CMS_NODE}.id): detachable CMS_USER
|
|
-- Node's author. if any.
|
|
require
|
|
valid_node: a_id >0
|
|
deferred
|
|
end
|
|
|
|
node_collaborators (a_id: like {CMS_NODE}.id): LIST [CMS_USER]
|
|
-- Possible list of node's collaborator.
|
|
require
|
|
valid_node: a_id > 0
|
|
deferred
|
|
end
|
|
|
|
feature -- Change: Node
|
|
|
|
save_node (a_node: CMS_NODE)
|
|
-- Save node `a_node'.
|
|
require
|
|
valid_user: attached a_node.author as l_author and then l_author.id > 0
|
|
deferred
|
|
end
|
|
|
|
delete_node (a_id: INTEGER_64)
|
|
-- Remove node by id `a_id'.
|
|
require
|
|
valid_node_id: a_id > 0
|
|
deferred
|
|
end
|
|
|
|
update_node (a_id: like {CMS_USER}.id; a_node: CMS_NODE)
|
|
-- Update node content `a_node'.
|
|
-- The user `a_id' is an existing or new collaborator.
|
|
require
|
|
valid_node_id: a_node.id > 0
|
|
valid_user_id: a_id > 0
|
|
deferred
|
|
end
|
|
|
|
update_node_title (a_id: like {CMS_USER}.id; a_node_id: like {CMS_NODE}.id; a_title: READABLE_STRING_32)
|
|
-- Update node title to `a_title', node identified by id `a_node_id'.
|
|
-- The user `a_id' is an existing or new collaborator.
|
|
require
|
|
valid_node_id: a_node_id > 0
|
|
valid_user_id: a_id > 0
|
|
deferred
|
|
end
|
|
|
|
update_node_summary (a_id: like {CMS_USER}.id; a_node_id: like {CMS_NODE}.id; a_summary: READABLE_STRING_32)
|
|
-- Update node summary to `a_summary', node identified by id `a_node_id'.
|
|
-- The user `a_id' is an existing or new collaborator.
|
|
require
|
|
valid_id: a_node_id > 0
|
|
deferred
|
|
end
|
|
|
|
update_node_content (a_id: like {CMS_USER}.id; a_node_id: like {CMS_NODE}.id; a_content: READABLE_STRING_32)
|
|
-- Update node content to `a_content', node identified by id `a_node_id'.
|
|
-- The user `a_id' is an existing or new collaborator.
|
|
require
|
|
valid_id: a_node_id > 0
|
|
valid_user_id: a_id > 0
|
|
deferred
|
|
end
|
|
|
|
--feature -- Misc
|
|
|
|
-- set_custom_value (a_name: READABLE_STRING_8; a_value: attached like custom_value; a_type: READABLE_STRING_8)
|
|
-- -- Save data `a_name:a_value' for type `a_type'
|
|
-- deferred
|
|
-- end
|
|
|
|
-- custom_value (a_name: READABLE_STRING_8; a_type: READABLE_STRING_8): detachable TABLE_ITERABLE [READABLE_STRING_8, STRING_8]
|
|
-- -- Data for name `a_name' and type `a_type'.
|
|
-- deferred
|
|
-- end
|
|
|
|
-- custom_value_names_where (a_where_key, a_where_value: READABLE_STRING_8; a_type: READABLE_STRING_8): detachable LIST [READABLE_STRING_8]
|
|
-- -- Names where custom value has item `a_where_key' same as `a_where_value' for type `a_type'.
|
|
-- deferred
|
|
-- end
|
|
|
|
end
|