mirror of https://github.com/buster-so/buster.git
3.2 KiB
3.2 KiB
Remove Asset Permissions by Email PRD
Overview
This PRD outlines the implementation of functionality to remove asset permissions using email addresses as user identifiers within the sharing access controls system.
Background
Users need to be able to revoke access to assets from other users by specifying their email addresses. This requires enhancing the existing permission removal functionality to work with email addresses.
Goals
- Implement a function to remove permissions using email addresses
- Soft delete the permission record (set deleted_at to current time)
- Validate inputs and handle errors appropriately
- Ensure proper permission checks
Non-Goals
- Implementing UI components for permission removal
- Hard deleting permission records
- Batch removal operations
Technical Design
Component: Enhanced Remove Asset Permissions Module
Enhance the existing remove_asset_permissions.rs
module with a new function:
pub async fn remove_share_by_email(
email: &str,
asset_id: Uuid,
asset_type: AssetType,
updated_by: Uuid,
) -> Result<()> {
// Implementation details
}
Implementation Details
- The function will first look up the user by email using the
find_user_by_email
function - If the user is found, it will soft delete the permission record
- If the user is not found, it will return an appropriate error
- The function will validate that the caller has permission to remove shares (Owner or FullAccess)
- The function will use a database update to set the deleted_at field to the current time
Database Update
The function will use the following update pattern:
diesel::update(asset_permissions::table)
.filter(asset_permissions::identity_id.eq(user_id))
.filter(asset_permissions::identity_type.eq(IdentityType::User))
.filter(asset_permissions::asset_id.eq(asset_id))
.filter(asset_permissions::asset_type.eq(asset_type))
.filter(asset_permissions::deleted_at.is_null())
.set((
asset_permissions::deleted_at.eq(Utc::now()),
asset_permissions::updated_at.eq(Utc::now()),
asset_permissions::updated_by.eq(updated_by),
))
.execute(&mut conn)
.await
Error Handling
The function should handle the following error cases:
- User not found
- Permission record not found
- Database errors
- Permission validation errors
Testing Strategy
Unit Tests
- Test removing an existing permission
- Test handling a non-existent user
- Test handling a non-existent permission
- Test permission validation
Integration Tests
- Test the function in combination with permission creation and checking
Dependencies
- User lookup module
- Database models and schema
- Diesel ORM
- Error handling utilities
Implementation Plan
- ✅ Enhance the
remove_asset_permissions.rs
file - ✅ Implement the
remove_share_by_email
function - ✅ Add validation and error handling
- ✅ Write tests
- ✅ Update the library exports in
lib.rs
Success Criteria
- ✅ Function correctly removes permissions using email addresses
- ✅ Appropriate validation and error handling is implemented
- ✅ Tests pass successfully
- ✅ Code is well-documented
Permission Requirements
- Requires Owner or FullAccess permission to execute